无法使用 plupload 将超过 2 个文件加载到 S3
Cannot load more than 2 files to S3 using plupload
只要我只加载 2 个多个文件,下面的代码就可以正常工作。如果我加载 3 个或更多,则第二个文件之后的每个文件都不会添加到我的 s3 存储桶中(尽管 plupload 没有显示错误)。
谁能明白为什么?
var uploader = new plupload.Uploader({
browse_button: 'browse', // this can be an id of a DOM element or the DOM element itself
url: 'https://s3.amazonaws.com/mybucket',
filters: {
max_file_size: '25mb',
prevent_duplicates: true,
multiple_queues: true
}
});
uploader.init();
uploader.bind('FilesAdded', function (up, files) {
plupload.each(files, function (file) {
var myFileName = file.name.toLowerCase();
myFileName = myFileName.replace(/[|&;$%@"<>()+,]/g, "");
var elem = $('#hfReplyGuid');
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "WebService.asmx/prepareUpload",
data: "{'acl':'private','bucket':'myBucket','file':'" + folderPath + elem.val() + "_" + myFileName + "'}",
success: function (data) {
params[myFileName] = { policy: data.d[0].Policy, signature: data.d[0].Signature };
var multipart_params = {
'key': folderPath + elem.val() + "_" + myFileName,
'filename': folderPath + elem.val() + "_" + myFileName,
'AWSAccessKeyId': AWSAccessKey,
'acl': 'private',
'signature': params[myFileName]["signature"],
'policy': params[myFileName]["policy"],
'success_action_status': '201'
}
up.setOption('multipart_params', multipart_params);
uploader.start();
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(xhr.responseText);
alert(thrownError);
}
});
});
});
我通过基于此 post Upload multiple files to Amazon S3 using plupload
的代码解决了这个问题
但是我必须在 FileFiltered 事件中创建策略,在 FilesAdded 事件中启动上传程序,然后在 BeforeUpload 事件中添加每个策略,如下所示:
var multipart_params = policies[file.id];
up.setOption('multipart_params', multipart_params);
只要我只加载 2 个多个文件,下面的代码就可以正常工作。如果我加载 3 个或更多,则第二个文件之后的每个文件都不会添加到我的 s3 存储桶中(尽管 plupload 没有显示错误)。
谁能明白为什么?
var uploader = new plupload.Uploader({
browse_button: 'browse', // this can be an id of a DOM element or the DOM element itself
url: 'https://s3.amazonaws.com/mybucket',
filters: {
max_file_size: '25mb',
prevent_duplicates: true,
multiple_queues: true
}
});
uploader.init();
uploader.bind('FilesAdded', function (up, files) {
plupload.each(files, function (file) {
var myFileName = file.name.toLowerCase();
myFileName = myFileName.replace(/[|&;$%@"<>()+,]/g, "");
var elem = $('#hfReplyGuid');
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "WebService.asmx/prepareUpload",
data: "{'acl':'private','bucket':'myBucket','file':'" + folderPath + elem.val() + "_" + myFileName + "'}",
success: function (data) {
params[myFileName] = { policy: data.d[0].Policy, signature: data.d[0].Signature };
var multipart_params = {
'key': folderPath + elem.val() + "_" + myFileName,
'filename': folderPath + elem.val() + "_" + myFileName,
'AWSAccessKeyId': AWSAccessKey,
'acl': 'private',
'signature': params[myFileName]["signature"],
'policy': params[myFileName]["policy"],
'success_action_status': '201'
}
up.setOption('multipart_params', multipart_params);
uploader.start();
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(xhr.responseText);
alert(thrownError);
}
});
});
});
我通过基于此 post Upload multiple files to Amazon S3 using plupload
的代码解决了这个问题但是我必须在 FileFiltered 事件中创建策略,在 FilesAdded 事件中启动上传程序,然后在 BeforeUpload 事件中添加每个策略,如下所示:
var multipart_params = policies[file.id];
up.setOption('multipart_params', multipart_params);