4

我正在使用 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

4 回答 4

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;
}
....
于 2014-02-23T00:06:08.563 回答
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;

 }
于 2017-11-10T19:54:55.137 回答
1

尝试使用 unique_names:true 和 rename:true。这个对我有用。

于 2012-12-18T12:14:49.537 回答
0

我发现这个问题的唯一完全有效的解决方案是利用multipart_paramsPlupload 上传器上的属性。

我正在使用的代码是;

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

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

c# 代码

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

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

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

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

于 2013-01-17T11:21:20.270 回答