在一个请求中上传多个文件 Dropzone 发送两个请求

upload multiple files in one request Dropzone sending two requests

我正在尝试使用 DropZone js 在一个请求中发送多个文件。

这是我的代码:

Dropzone.autoDiscover = false;

var myDropzone = new Dropzone('#upload-Invoices', {       
    paramName: "files", 
    maxFilesize: 3.0, 
    maxFiles: 4,
    parallelUploads: 10000,
    uploadMultiple: true,
    autoProcessQueue: false
});

$('#btnUpload').on('click', function () {
    myDropzone.processQueue();
});

控制器:

public void FileUpload( IEnumerable<HttpPostedFileBase> file )
{
    // Do Something
}

查看:

<form action="/Index/FileUpload"
      class="dropzone"
      id="upload-Invoices" data-ajax-method="POST" data-ajax="true">
    <input type="submit" value="Upload File to Server" id="btnUpload">
</form>

正在接收文件,但在不同的请求中,我想在一个请求中发送所有文件,Dropzone 页面有一个选项,但它不起作用。 提前致谢

enqueueForUpload 属性 已弃用,您应该改用 autoProcessQueue。我的预感是,由于不再使用 enqueueForUpload 并且您没有将 autoProcessQueue 设置为 false,因此 DropZone.js 假定您要发送每个文件,因为它被放置在组件上。

您应该删除 enqueueForUpload: false,设置 autoProcessQueue: false 并在您选择(即删除)所有需要上传的文件后,调用 .processQueue() 函数,如documentation.

问题是我使用的输入 type="submit" 会自己做另一个 post,将其更改为类型 button 有效。

我还看到多个 POST 一次发送 2 个文件(因此,例如,2 个单独的 POST 总共 4 个文件)。

我找到了解决方案 here:增加 parallelUploads。我现在按以下方式创建放置区:

var myDropzone = new Dropzone('div#dz', {
  url: 'http://httpbin.org/post',
  uploadMultiple: true,
  parallelUploads: 10
});

您可以使用 uploadMultiple 属性 默认值 false 将其更改为 true

$(".dropzone").dropzone({
            // autoQueue:false,
            parallelUploads:10,
            uploadMultiple:true,

https://www.dropzonejs.com/#config-uploadMultiple

我可以看到它很旧 post,但是,我会回答希望它可能对某人有所帮助。

2 次请求

  1. OPTIONS - no files
  2. POST - with files

Chrome 将执行 pre-flight 请求(选项) 以查找 CORS headers。这是几乎所有最新浏览器都遵循的标准。

有同样的问题,只需将 autoDiscover: false 添加到您的 dropzone 选项,它应该可以工作!

我的选择是这样的:

Dropzone.options.UploadZone = {        
    addRemoveLinks: true,
    autoDiscover: false,
    uploadMultiple: true,
    parallelUploads: 10,
    maxFiles: 10,
    acceptedFiles: ".jpeg,.jpg,.png",
    autoProcessQueue: false,
    ...

使用 autoProcessQueue: false 和 uploadMultiple: true:我收到请求的每 2 个文件。

然后我添加了 parallelUploads: 10 和 maxFiles: 10 我不知道为什么但是我的前 2 个文件在我将它们放在 dropzone 上后立即开始上传,即使使用 autoProcessQueue: false。

然后我只需添加 autoDiscover: false,然后一切正常!

好看!