根据使用情况,如何限制dropzone.js允许的文件数量?
例如,我可能只需要上传1个,2个或4个文件。
不是uploadMultiple
。不幸的是,uploadMultiple
仅适用于每个请求处理的文件数。
Answers:
我实现了这种方式略有不同。只要添加新文件,我就删除旧的已删除文件。它充当了覆盖文件的角色,而这正是我想要的用户体验。
Dropzone.options.myAwesomeDropzone = {
accept: function(file, done) {
console.log("uploaded");
done();
},
init: function() {
this.on("addedfile", function() {
if (this.files[1]!=null){
this.removeFile(this.files[0]);
}
});
}
};
this.files
也在那里存在。这会缩短代码一点。
undefined
是只有一个文件的情况,因此if条件始终返回true。也许只是改变为if (this.files[1])
?
Nowell指出,此问题已于2013年8月6日得到解决。使用此表单的工作示例可能是:
<form class="dropzone" id="my-awesome-dropzone"></form>
您可以使用以下JavaScript:
Dropzone.options.myAwesomeDropzone = {
maxFiles: 1,
accept: function(file, done) {
console.log("uploaded");
done();
},
init: function() {
this.on("maxfilesexceeded", function(file){
alert("No more files please!");
});
}
};
dropzone元素甚至具有特殊的样式,因此您可以执行以下操作:
<style>
.dz-max-files-reached {background-color: red};
</style>
<form class="dropzone" id="myAwesomeDropzone"></form>
吗?
我认为最直观的单个文件上传过程是在新条目上替换以前的文件。
$(".drop-image").dropzone({
url: '/cart?upload-engraving=true',
maxFiles: 1,
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
})
init: function(){ this.on('maxfilesexceeded', function(file){ this.removeAllFiles(); this.addFile(file); }); }
选项即使在添加了选项的情况下也可以很好地在我的项目中使用autoProcessQueue: false
。
您可以通过在dropezone.js中进行更改来限制上传的文件数量
Dropzone.prototype.defaultOptions = {maxFiles:10,}
看起来maxFiles是您要寻找的参数。
https://github.com/enyo/dropzone/blob/master/src/dropzone.coffee#L667
1-set maxFiles计数“ maxFiles:1” 2-在maxfilesexededed事件中清除所有文件并添加新文件
事件:调用每个因文件数超过maxFiles限制而被拒绝的文件。
var myDropzone = new Dropzone("div#yourDropzoneID", { url: "/file/post",
uploadMultiple: false, maxFiles: 1 });
myDropzone.on("maxfilesexceeded", function (file) {
myDropzone.removeAllFiles();
myDropzone.addFile(file);
});
提供的解决方案的问题在于,您只能上传1个文件。就我而言,一次只需要上传一个文件(单击或拖放)。
这是我的解决方案。
Dropzone.options.myDropzone = {
maxFiles: 2,
init: function() {
this.handleFiles = function(files) {
var file, _i, _len, _results;
_results = [];
for (_i = 0, _len = files.length; _i < _len; _i++) {
file = files[_i];
_results.push(this.addFile(file));
// Make sure we don't handle more files than requested
if (this.options.maxFiles != null && this.options.maxFiles > 0 && _i >= (this.options.maxFiles - 1)) {
break;
}
}
return _results;
};
this._addFilesFromItems = function(items) {
var entry, item, _i, _len, _results;
_results = [];
for (_i = 0, _len = items.length; _i < _len; _i++) {
item = items[_i];
if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
if (entry.isFile) {
_results.push(this.addFile(item.getAsFile()));
} else if (entry.isDirectory) {
_results.push(this._addFilesFromDirectory(entry, entry.name));
} else {
_results.push(void 0);
}
} else if (item.getAsFile != null) {
if ((item.kind == null) || item.kind === "file") {
_results.push(this.addFile(item.getAsFile()));
} else {
_results.push(void 0);
}
} else {
_results.push(void 0);
}
// Make sure we don't handle more files than requested
if (this.options.maxFiles != null && this.options.maxFiles > 0 && _i >= (this.options.maxFiles - 1)) {
break;
}
}
return _results;
};
}
};
希望这可以帮助 ;)
您还可以添加回调-在这里我将Dropzone用于Angular
dzCallbacks = {
'addedfile' : function(file){
$scope.btSend = false;
$scope.form.logoFile = file;
},
'success' : function(file, xhr){
$scope.btSend = true;
console.log(file, xhr);
},
'maxfilesexceeded': function(file) {
$timeout(function() {
file._removeLink.click();
}, 2000);
}
}