【发布时间】:2021-03-25 07:08:06
【问题描述】:
我正在尝试使用浏览器的 aws-sdk.js 将 dropzone.js 上传器隐含到亚马逊 S3。但是当我超过设置中的“parallelUploads”最大值时,队列永远不会完成。我正在使用以下链接中的方法:
我的代码的相关部分:
var dz = new Dropzone("#DZContainer", {
acceptedFiles: "image/*,.jpg,.jpeg,.png,.gif",
autoQueue: true,
autoProcessQueue: true,
parallelUploads: 10,
clickable: [".uploadButton"],
accept: function(file, done){
let params = {
"Bucket": "upload-bucket",
"Key": getFullKey(file.name),
Body: file,
Region: "us-east-1,
ContentType: file.type
}
file.s3upload = AWS.S3.ManagedUpload(params);
if (typeof(done) === 'function') done();
},
canceled: function(file) {
if (file.s3upload) file.s3upload.abort();
},
init: function () {
this.on('removedfile', function (file) {
if (file.s3upload) file.s3upload.abort();
});
}
)
dz.uploadFiles = function (files) {
for (var j = 0; j < files.length; j++) {
var file = files[j];
dz.SendFile(file);
}
};
dz.SendFile = function(file) {
file.s3upload.send(function (err, data) {
if (err) {
console.err(err)
dz.emit("error", file, err.message);
} else {
dz.emit("complete", file);
}
});
如果我拖入(或使用可点击)超过 10 个文件,前 10 个会完成,但它不会处理队列的其余部分。我错过了什么?感谢所有帮助
编辑:随着对 Dropzone 的深入研究,看起来文件状态似乎永远不会被设置为完成。我在 dropzone 代码中看到了一个名为 _finished() 的函数,但我很难弄清楚应该触发该函数的具体内容。我尝试了下面列出的 dz.emit("complete", file) 以及添加 dz.emit("success",file) 但我在 _finished() 函数第一行的断点永远不会触发。因此 file.status 永远不会设置为已完成。 有谁知道 _finished() 应该何时/什么/如何运行?
【问题讨论】:
标签: amazon-web-services amazon-s3 dropzone.js aws-sdk-js