6

まず第一に、jQueryプラグインはここにあります:

https://github.com/blueimp/jQuery-File-Upload

PHPバージョンのスクリプトを使用していて、名前を変更するのではなく、同じ名前の画像を置き換えようとしています。

名前を変更する機能を見つけたと思いますが、試した編集が機能しません。

  protected function upcount_name_callback($matches) {
        $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
        $ext = isset($matches[2]) ? $matches[2] : '';
        return ' ('.$index.')'.$ext;
    }

    protected function upcount_name($name) {
        return preg_replace_callback(
            '/(?:(?: \(([\d]+)\))?(\.[^.]+))?$/',
            array($this, 'upcount_name_callback'),
            $name,
            1
        );
    }

助言がありますか?私はあちこちでこれを探しましたが、役に立ちませんでした。

アップロードを行うphpクラスへのリンク: https ://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/upload.class.php

助言がありますか?

編集:

これらの関数でnullを返そうとしましたが、ファイル名が同じである場合にどうすればよいかわからないため、スクリプトがハングします。

4

3 に答える 3

9

新しい一意のファイル名を作成する代わりに、PHP サーバー側スクリプトを変更して、ファイルを上書きすることができます。アップロード ハンドラ クラス関数を変更するだけですget_file_name

元の機能:

 protected function get_file_name($file_path, $name, $size, $type, $error,
        $index, $content_range) {
    $name = $this->trim_file_name($file_path, $name, $size, $type, $error,
        $index, $content_range);
    return $this->get_unique_filename(
        $file_path,
        $this->fix_file_extension($file_path, $name, $size, $type, $error,
            $index, $content_range),
        $size,
        $type,
        $error,
        $index,
        $content_range
    );
}

これを次のように変更します。

protected function get_file_name($file_path, $name, $size, $type, $error,
            $index, $content_range) {
        $name = $this->trim_file_name($file_path, $name, $size, $type, $error,
            $index, $content_range);
        return $name;
    }

このように、アップロードされたファイル名がサーバー上の既存のファイルと同じ場合、既存のファイルは上書きされます。

于 2013-06-11T08:00:37.217 に答える
0

このカスタム関数をファイル index.php で使用してください。 UploadHandler.php が必要です。

protected function trim_file_name($file_path, $name, $size, $type, $error,
            $index, $content_range) {

    // Remove path information and dots around the filename, to prevent uploading
    // into different directories or replacing hidden system files.
    // Also remove control characters and spaces (\x00..\x20) around the filename:
    $name = trim(basename(stripslashes(unique_custom_file_name)), ".\x00..\x20");
    // Use a timestamp for empty filenames:
    if (!$name) {
        $name = str_replace('.', '-', microtime(true));
    }
    return $name;
}
于 2014-11-08T04:34:13.763 に答える
0

次のようにオプションとして上書きを使用することもできます。

$options = array(
  'overwrite' => $overwrite
);
$upload_handler = new UploadHandler($options);

UploadHandler.php : デフォルトのパラメーターを追加します。

    function __construct($options = null,...){
            ...
            'overwrite' => false,
            ...
    }

次に get_file_name() 関数を

    protected function get_file_name($file_path, $name, $size, $type, $error,
            $index, $content_range) {
        $name = $this->trim_file_name($file_path, $name, $size, $type, $error,
            $index, $content_range);
        if($this->options['overwrite'])
            return $name;
        else
            return $this->get_unique_filename(
                $file_path,
                $this->fix_file_extension($file_path, $name, $size, $type, $error,
                    $index, $content_range),
                $size,
                $type,
                $error,
                $index,
                $content_range
            );
    }

よろしく

于 2017-11-16T15:35:33.753 に答える