【问题标题】:jquery file upload - how to overwrite file NOT renamejquery文件上传 - 如何覆盖文件不重命名
【发布时间】:2013-01-25 01:46:28
【问题描述】:

我正在努力更新 Jquery 文件上传插件,因此当您上传文件时,它只会覆盖具有相同名称的现有文件,而不是使用 upcount 重命名它。

我已应用此链接中涵盖的更改:https://github.com/blueimp/jQuery-File-Upload/issues/1965

但我似乎无法覆盖此插件以使其正常工作?

这里有一个尚未回答的现有问题:jQuery File Upload by bluimp, how to replace instead of renaming

任何有关这方面的指导将不胜感激。

【问题讨论】:

标签: jquery-ui jquery-plugins file-upload overwrite blueimp


【解决方案1】:

Anno 2018 这也可以工作(PHP 7.1):

class MyUploadHandler extends UploadHandler
{
    public function __construct($options = array(), $initialize = true, $error_messages = null) {
        $options += array(
            'overwrite_existing' => true
        );

        parent::__construct($options, $initialize, $error_messages);
    }

    protected function get_unique_filename($file_path, $name, $size, $type, $error, $index, $content_range) {
        if ($this->options['overwrite_existing'] ?? false) {
            return $name;
        }

        return parent::get_unique_filename($file_path, $name, $size, $type, $error, $index, $content_range);
    }
}

它避免了必须更改原始代码,然后可以将其用作库。

【讨论】:

    【解决方案2】:

    2016 更新到 MKoosej 的修复! 在 UploadHandler.php → 受保护的函数 get_file_name ... 替换

    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
        );
    

    return $this -> trim_file_name($file_path, $name, $size, $type, $error, $index, $content_range);
    

    【讨论】:

    • 其他解决方案不再适用于新版本 (2016+) 的上传。这个可以。
    【解决方案3】:

    我尝试了@MKoosej 的解决方案。就我而言,它工作得很好,但我还编辑了trim_file_name,我让它只返回一个文件名(我必须做一个上传器,将任何文件名转换为data.csv)。此外,我必须制作其他版本的上传器,我应该重写文件名而不是重命名,但不同名称的不同文件应该保持不同。所以当我在那里尝试@MKoosej 解决方案时,它开始上传只有扩展名的文件,比如没有文件名的.jpeg。 所以,我找到了这个解决方案: 在 func get_unique_filename 一开始我放了这个:

    $oldName=$name;
    

    并返回$oldName 而不是$name,这很好。

    【讨论】:

      【解决方案4】:

      查看 github (here) 上的文档并向下滚动到“如何在上传的生命周期中将文件绑定到元素节点”的位置。这是代码:

      $(function () {
          $('#fileupload').fileupload({
              dataType: 'json',
              add: function (e, data) {
                  data.context = $('<p/>').text('Uploading...').appendTo(document.body);
                  data.submit();
              },
              done: function (e, data) {
                  data.context.text('Upload finished.');
              }
          });
      });
      

      注意done回调函数。如果您展开 data 对象,您会注意到有一个 data.files 对象以及一个 data.result 对象。 data.result 包含服务器上的文件 的名称。因此,根据上面给出的示例脚本,服务器上新上传的文件的名称是 data.result.files[0].name

      我希望这对某人有所帮助

      【讨论】:

        【解决方案5】:

        如果您使用 wiki 中存在的 UploadHandler.php,这很简单。在 get_file_name 方法中,您应该替换这一行:

            return $this -> get_unique_filename($this -> trim_file_name($name, $type, $index, $content_range), $type, $index, $content_range);
        

        用这个:

         return $this -> trim_file_name($name, $type, $index, $content_range);
        

        【讨论】:

        • 大声笑,伙计,你的解决方案帮助了我,但实际上这对我来说不起作用。那我自己写答案。
        【解决方案6】:

        我需要相同的文件覆盖选项。

        使用 PHP UploadHandler.php 文件,我做了一个非常适合我的快速破解。 我确信有更好的方法,但这可能对其他人有所帮助。

        查找处理程序“upcount_name_callback”并将返回语句替换为取出的(索引)编号。我留下了原来的退货声明,以防我需要回去:)

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

        【讨论】:

          【解决方案7】:

          只需在回调中执行 ajax 请求即可开始上传并从数据盘中删除文件。您可以使用 data.files[0].name 找到文件名。

          然后你只需搜索带有旧链接的 tr,如下所示:

          $("a[title='"+ data.files[0].name + "']").each(function () {
                  $(this).closest('tr').fadeOut();
              });
          

          然后淡出。

          问候

          【讨论】:

          • 很抱歉,但我无法弄清楚表格行上的 DOM 操作与手头的问题有什么关系,甚至你的建议上传前删除文件...
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-26
          • 2023-02-03
          • 2011-12-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多