Plupload文件重命名

时间:2012-12-18 11:53:54

标签: javascript jquery amazon-s3 plupload

我正在使用Plupload上传到S3;我的问题是我想要更改文件的名称,所以当它们驻留在S3中时,它们将被更改为我想要的格式。我设法检索函数上传的文件的文件名:

 FilesAdded: function (up, files) {
                    for (var i in files) {
                        files[i].name = files[i].name.split('_').join(' ').trim();
                        alert('Selected files: ' + files[i].name);

                    }

控件中的文件名发生了变化,但是当我检查S3时,文件没有改变。

我确保unique_names属性为false并将属性重命名为true;但没有任何帮助吗?

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,即使用S3的pluploader并希望在上传之前规范化文件名。不幸的是,“文件”参数似乎是只读的,文件名称的任何更改都不会显示在提交的表单中。

但是如果我们将'key'参数更改为精确的字符串(规范化名称),它将导致S3使用不同的名称保存它。我们可以创建一个规范化的名称,并在'FileAdded'回调的multipart_param中的'key'参数中使用它。

....
FilesAdded: function(up, files) {
  console.log("Uploader.FilesAdded ", up, files);

  var file = files[0];

  //Replace unwanted characters with "_"
  var new_name = file.name.replace(/[^a-z0-9\.]+/gi,"_").toLowerCase();

  console.log("Changing file name to ", file.name);

  //Create multipart_params here (or just set the 'key' and 'Filename')
  var multipart_params =  {
    'key': config.key + new_name, // *instead of ${filename}
    'Filename':  config.key + new_name,
    'acl': config.acl,
    'Content-Type': '',
    'AWSAccessKeyId' : config.accessId,
    'policy': config.policy,
    'signature': config.signature
  };

 //
 up.settings.multipart_params = multipart_params;
}
....

答案 1 :(得分:2)

我要求在执行分段上传到S3之前,将所有上传队列中的文件添加用户可定义的前缀。在我的情况下,可以在开始上传之前随时编辑前缀 - 因此使用 FilesAdded 事件是不可接受的。

对我有用的解决方案是使用 BeforeUpload ,它会在开始上传之前为队列中的每个文件触发。

 BeforeUpload: function(up, file) {

     //Change the filename          
     file.name = appendUniqueId(file.name);
     file.name = addPrefix(file.name);

     var params = up.settings.multipart_params;
     params.key = file.name;
     params.Filename = file.name;

 }

答案 2 :(得分:0)

尝试使用unique_names:true,重命名:true。这个对我有用。

答案 3 :(得分:0)

我发现此问题的唯一完全有效的解决方案是在Plupload上传器上使用属性multipart_params

我正在使用的代码是;

uploader.bind('BeforeUpload', function (up, file) {
    uploader.settings.multipart_params = { 'renamedFileName': 'yourRenamedFileName' };
});

然后,当您处理图像时,您可以从发布的信息中请求此图像;

c#c​​ode

var renamedFileName = context.Request["renamedFileName"].ToString();

对于您的代码,您可以尝试;

uploader.bind('BeforeUpload', function (up, file) {
    uploader.settings.multipart_params = { 'renamedFileName': file.name.split('_').join(' ').trim(); };
});

然后,您可以使用此附加信息重命名服务器上的文件。