Dropzone.js - 在多个文件上传时多次只上传 1 个文件
Dropzone.js - uploading only 1 file multiple times on multiple file upload
我正在使用 Dropzone.js 提交一堆包含其他表单元素的文件,如 https://github.com/enyo/dropzone/wiki/Combine-normal-form-with-Dropzone 中突出显示的那样,但是,在拖放区中拖动多个不同的文件并提交表单时,它原来只有其中一个被上传了。我也在跟踪我的数据库中上传的文件,似乎根据拖入拖放区进行上传的文件数量,单个文件被上传了很多次。例如:我将 5 个具有差异文件名的差异图像拖入拖放区,其中之一是 'sunshine.jpg',结果 'sunshine.jpg' 在数据库中记录了 5 次。在进一步探测中,我通过 Chrome 开发工具中的网络面板发现,在请求 header 中,只有一个文件在一个数组中被多次发送。排查了一段时间,收效甚微。任何见解将不胜感激。
压缩HTML:
<form action="" method="post" enctype="multipart/form-data" novalidate class="dropzone" id="mydropzone" name="create-form">
<div class="input-group" id="whatever">
<div id="dropzonePreview">
<div class="fallback">
<input name="file" type="file" multiple />
</div>
</div>
</div>
...Other form elements
<input style="margin-bottom:15px;" id="btn_main_2" type="button" name="create" value='<?php echo $create_button; ?>' class="btn btn-large btn-success">
</form>
JavaScript:
Dropzone.options.mydropzone = {
url: 'Modules/global/module-fileuploads-dropzone.2.php',
addRemoveLinks: true,
autoProcessQueue: false,
autoDiscover: false,
paramName: 'file',
previewsContainer: '#dropzonePreview',
clickable: false,
uploadMultiple: true,
parallelUploads: 100,
maxFiles: 100,
accept: function(file, done) {
console.log("uploaded file");
done();
},
error: function(file, msg){
alert(msg);
},
init: function() {
var myDropzone = this;
$("#btn_main_2").on('click',function(e) {
e.preventDefault();
myDropzone.processQueue();
});
}
};
网络日志截图:
经过进一步排查,我发现这个问题的解决方法相当简单:
paramName: 'file[]'
而不是
paramName: 'file'
因为在本例中我们要处理一组文件。看起来在将数组指定为参数时不能忽略这一点。
我正在使用 Dropzone.js 提交一堆包含其他表单元素的文件,如 https://github.com/enyo/dropzone/wiki/Combine-normal-form-with-Dropzone 中突出显示的那样,但是,在拖放区中拖动多个不同的文件并提交表单时,它原来只有其中一个被上传了。我也在跟踪我的数据库中上传的文件,似乎根据拖入拖放区进行上传的文件数量,单个文件被上传了很多次。例如:我将 5 个具有差异文件名的差异图像拖入拖放区,其中之一是 'sunshine.jpg',结果 'sunshine.jpg' 在数据库中记录了 5 次。在进一步探测中,我通过 Chrome 开发工具中的网络面板发现,在请求 header 中,只有一个文件在一个数组中被多次发送。排查了一段时间,收效甚微。任何见解将不胜感激。
压缩HTML:
<form action="" method="post" enctype="multipart/form-data" novalidate class="dropzone" id="mydropzone" name="create-form">
<div class="input-group" id="whatever">
<div id="dropzonePreview">
<div class="fallback">
<input name="file" type="file" multiple />
</div>
</div>
</div>
...Other form elements
<input style="margin-bottom:15px;" id="btn_main_2" type="button" name="create" value='<?php echo $create_button; ?>' class="btn btn-large btn-success">
</form>
JavaScript:
Dropzone.options.mydropzone = {
url: 'Modules/global/module-fileuploads-dropzone.2.php',
addRemoveLinks: true,
autoProcessQueue: false,
autoDiscover: false,
paramName: 'file',
previewsContainer: '#dropzonePreview',
clickable: false,
uploadMultiple: true,
parallelUploads: 100,
maxFiles: 100,
accept: function(file, done) {
console.log("uploaded file");
done();
},
error: function(file, msg){
alert(msg);
},
init: function() {
var myDropzone = this;
$("#btn_main_2").on('click',function(e) {
e.preventDefault();
myDropzone.processQueue();
});
}
};
网络日志截图:
经过进一步排查,我发现这个问题的解决方法相当简单:
paramName: 'file[]'
而不是
paramName: 'file'
因为在本例中我们要处理一组文件。看起来在将数组指定为参数时不能忽略这一点。