我正在使用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;但没有任何帮助吗?
答案 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#code
var renamedFileName = context.Request["renamedFileName"].ToString();
对于您的代码,您可以尝试;
uploader.bind('BeforeUpload', function (up, file) {
uploader.settings.multipart_params = { 'renamedFileName': file.name.split('_').join(' ').trim(); };
});
然后,您可以使用此附加信息重命名服务器上的文件。