Atto HTMLエディタ イメージファイルの挿入でサイズ制限をしたい。

Atto HTMLエディタ イメージファイルの挿入でサイズ制限をしたい。

- Soichi Watanabe の投稿
返信数: 2

渡邊です。いつもお世話になります。

Atto HTMLエディタでイメージファイルの挿入ができるのは便利なのですが,最近のスマホ写真のピクセル数が大きいため,サーバ容量を圧迫して困っております。
atto_imageがアップロード機能を担っていると思うのですが,
その処理をフックして,imagemagickのconvertを,convert ????? -resize 640x ?????
のような形で挟むことは可能なのでしょうか。

相当困難と思いますので,無理であればあきらめます。

CentOS7, Moodle3.5 PostgreSQLで使用しております。

なにとぞよろしくお願い申し上げます。

Soichi Watanabe への返信

Re: Atto HTMLエディタ イメージファイルの挿入でサイズ制限をしたい。

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

ファイルの拡張子およびサイズを指定してアップロードを制限する以下のプログラム修正ではいかがでしょうか。

修正対象ファイル:
config.php

[ 修正前 ]
require_once(__DIR__ . '/lib/setup.php');

// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!

[ 修正後 ]
require_once(__DIR__ . '/lib/setup.php');

# 100KB = 102400, 500KB = 512000, 1MB = 1048576
$CFG->imagetype = array(jpg, png);
$CFG->imagemaxsize = 512000;

// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!

-----------------------

修正対象プログラム:
repository/upload/lib.php

修正箇所:
152行目

[ 修正前 ]
        // {@link repository::build_source_field()}
        $sourcefield = $this->get_file_source_info($_FILES[$elname]['name']);
        $record->source = self::build_source_field($sourcefield);

        if (empty($saveas_filename)) {
            $record->filename = clean_param($_FILES[$elname]['name'], PARAM_FILE);
        } else {
            $ext = '';
            $match = array();

[ 修正後 ]
        // {@link repository::build_source_field()}
        $sourcefield = $this->get_file_source_info($_FILES[$elname]['name']);
        $record->source = self::build_source_field($sourcefield);

        if (empty($saveas_filename)) {
            $ext = '';
            $match = array();
            $record->filename = clean_param($_FILES[$elname]['name'], PARAM_FILE);
            if (preg_match('/\.([a-z0-9]+)$/i', $record->filename, $match)) {
               if (isset($match[1])) {
                   $ext = $match[1];
               }
            }
            if (in_array($ext, $CFG->imagetype)) {
                if ($_FILES[$elname]['size'] > $CFG->imagemaxsize) {
                     $imagemaxsizedisplay = display_size($CFG->imagemaxsize);
                     throw new file_exception('maxbytesfile', (object) array('file' => $record->filename,
                                                                             'size' => $imagemaxsizedisplay));
                }
            }
        } else {
            $ext = '';
            $match = array();
評点平均: お役立ち度: ★★★★★★★ (2)
Mitsuhiro Yoshida への返信

Re: Atto HTMLエディタ イメージファイルの挿入でサイズ制限をしたい。

- Soichi Watanabe の投稿
本当に助かりました。動画アップロードの制限もしたかったので,
config.phpで,
$CFG->imagetype = array(ai, bmp, gdraw, gif, ico, jpe, jpeg, jpg, pct, pic, pict, png, svg, svgz, tif, tiff);
$CFG->imagemaxsize = 512000;
$CFG->videotype = array(avi, flv, f4v, mov, mp4, m4v, mpeg, mpe, mpg, ogv, qt, swf, swfl, webm);
$CFG->videomaxsize = 10485760;

また,repository/upload/lib.phpで,
if (in_array($ext, $CFG->imagetype)) {
if ($_FILES[$elname]['size'] > $CFG->imagemaxsize) {
$imagemaxsizedisplay = display_size($CFG->imagemaxsize);
throw new file_exception('maxbytesfile', (object) array('file' => $record->filename,
'size' => $imagemaxsizedisplay));
}
}
if (in_array($ext, $CFG->videotype)) {
if ($_FILES[$elname]['size'] > $CFG->videomaxsize) {
$videomaxsizedisplay = display_size($CFG->videomaxsize);
throw new file_exception('maxbytesfile', (object) array('file' => $record->filename,
'size' => $videomaxsizedisplay));
}
}

とすることで,完璧に動作しました。
※大きすぎるファイルを選択すると,
Error
ファイルITPass10Ani.mp4は大きすぎます。あなたがアップロードできる最大サイズは10MBです。
と表示されるのでとても分かりやすくて助かりました。

調べていて,サイト管理→サーバ→ファイルタイプで,アップロード可能なファイルタイプを制限できるか?とも思ったのですが,無理でした。

本当にありがとうございました。
評点平均: お役立ち度: ★★★★★★★ (2)