我目前正在开发一个图像共享平台,使用 Meteor、CollectionFS 和 GridFS StorageAdapter。
我也在使用优秀的包dbarrett:dropzonejs,但问题是它对 CollectionFS 的实现,特别是关于 XHR 和 uploadprogress 的东西。
现在,我使用此代码。
问题:上传文件时,我在控制台中注意到不需要的 POST 请求以及来自 CollectionFS 的 PUT 请求。我将它们缩小到 dbarrett_dropzone.js 文件中的 xhr.send() 。为了阻止它们,我尝试了 template.rendered > dropzone options :
init: function() {
this.on("sending", function(file,xhr) {
xhr.abort(); //file.xhr.abort() does not work either...
});
} // console shows "NS_ERROR_NOT_INITIALIZED"
或覆盖 dropzone.accept :
},
accept: function(file,done) {
done("dummy message");
},
但随后它会阻止填充队列数组,这是 CollectionFS 插入所必需的......
问题:我认为需要覆盖 dropzone.uploadFiles(files) 函数,所有 xhr 内容都在其中写入,......但是我所有的尝试都失败了,有人可以提出一个实现吗?
理想情况下,我认为这样的实现会是这样的:
Template.albumContent.rendered = function() {
var dz = new Dropzone("form#dzId", {
url: "#",
autoProcessQueue: false,
addRemoveLinks: true,
acceptedFiles: "image/*",
init: function() {
this.on("success", function(file) {
Meteor.setTimeout(function() {
dz.removeFile(file);
},3000)
});
},
uploadFiles: function(files) {
var dzgqf = dz.getQueuedFiles();
if (dzgqf.length) {
dzgqf.forEach(function(file) {
var fsFile = new FS.File(file);
fsFile.owner = Meteor.userId();
Images.insert(fsFile, function(error, fileObj) {
if (error) throw new Meteor.Error("Error uploading this file : ", fsFile);
// how to pass properly fileObj.updateProgress() stuff to dz.uploadprogress event ???
});
});
}
}
});
}
Template.albumContent.events({
"click .js-upload-all-images": function(event, template) {
event.preventDefault(); event.stopPropagation();
var dz = Dropzone.getElement("#dzId").dropzone;
console.log("Queued files : ", dz.getQueuedFiles());
dz.processQueue();
}
});