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 回答