【问题标题】:Jquery BlueImp how to change filename before upload?Jquery BlueImp 如何在上传前更改文件名?
【发布时间】:2014-12-30 23:49:08
【问题描述】:

通过 jquery blueimp 上传的文件可以更改文件名吗?

【问题讨论】:

    标签: jquery file-upload blueimp


    【解决方案1】:

    require('UploadHandler.php');
    class CustomUploadHandler extends UploadHandler {
        protected function trim_file_name($file_path, $name, $size, $type, $error, $index, $content_range) {
                $name = 'First_' . microtime(true);
                $name = str_replace('.', '', $name);
                return $name;
            }
    }
    
    $upload_handler = new CustomUploadHandler();

    在你的自定义文件index.php中初始化UploadHandler.php这个函数

    【讨论】:

    • 良好的非黑客解决方案。谢谢!不过,您的解决方案中有错字,我会对其进行编辑以修复它。
    • 是的!非常感谢你
    • +1... 但非黑客解决方案?他覆盖修剪功能以更改文件名?嗯。它是现有解决方案中最非 hack 的解决方案。
    【解决方案2】:

    只需将 UploadHandler.php 文件中的 trim_file_name() 函数更改为以下内容即可实现。

    protected function trim_file_name(VARIABLES) {
        $name = uniqid();
        return $name;
    }
    

    仅此而已

    【讨论】:

    • trim_file_name 从哪里调用?我需要发送变量“名称”,但找不到发送方法。
    【解决方案3】:

    这是特定于 BlueImp 的客户端解决方案。它使用BlueImp's "add" callback。我的示例将删除文件名中的逗号。

    $('#fileupload').fileupload({
        add: function (e, data) {
            $.each(data.files, function (index, file) {
                //set new name here
                var newname = data.files[index].name.replace(",", "");
                Object.defineProperty(data.files[index], 'name', {
                    value: newname
                });
            });
            $.blueimp.fileupload.prototype.options.add.call(this, e, data);
        }
    })
    

    【讨论】:

    • 这是我发现的唯一有效的客户端解决方案。顺便说一句,该代码仅替换第一个逗号。你可能想要.replace(/,/g, '').split(',').join('')
    • 2022 年仍然有效
    【解决方案4】:

    File 对象的 name 属性是只读的,但可以为每个单独的文件提供一个替代名称作为 uploadName 属性。

    可以使用回调

    $('#fileupload').fileupload
      submit: (e, data) ->
        data.files[0].uploadName = 'newname'
    

    如果您的 data.files 一次包含所有文件,您可以遍历它们。

    【讨论】:

      【解决方案5】:
      1. 打开 UploadHandler.php

      2. 查找

        protected function handle_file_upload();

      3. 编辑

      $file->name = $this->get_file_name($uploaded_file, 'GiveYourNewName', $size, $type, $error, $index, $content_range);
      

      【讨论】:

        【解决方案6】:

        此解决方案由“lethal.industry”用户here 发布。 您必须将此代码粘贴到 UploadHandler.php 文件中的 UploadHandler 类中

           //custom function which generates a unique filename based on current time
            protected function generate_unique_filename($filename = "")
                {
        
                    $extension = "";
                    if ( $filename != "" )
                    {
                        $extension = pathinfo($filename , PATHINFO_EXTENSION);
        
                        if ( $extension != "" )
                        {
                            $extension = "." . $extension;
                        }
                    }
        
                    return md5(date('Y-m-d H:i:s:u')) . $extension;
                }
        

        您可以根据需要修改文件名更改最后一行'return ...'

        然后你在 UploadHandler.php 中搜索 'handle_file_upload' 函数并替换这一行

        $file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error, $index, $content_range);
        

        对于这一行

        $file->name = $this->generate_unique_filename($name);
        

        【讨论】:

        • 此方法不适用于多文件激活,仅在上传一个文件时有效。查看下面我的回复,找出实现此目的的简单方法。
        猜你喜欢
        • 2013-05-19
        • 2017-04-14
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-17
        • 1970-01-01
        • 2014-02-06
        相关资源
        最近更新 更多