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

时间:2015-01-19 10:00:40

标签: jquery asp.net-mvc file-upload dropzone.js

我正在尝试使用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页面有一个选项,虽然它不起作用。 在此先感谢

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

不推荐使用enqueueForUpload属性,而应使用autoProcessQueue。我的预感是,由于enqueueForUpload已不再使用且您未将autoProcessQueue设置为false,因此DropZone.js假定您要发送每个文件,因为它已被删除在组件上。

您应该删除enqueueForUpload: false,设置autoProcessQueue: false,在您选择(即删除)您需要上传的所有文件后,请调用.processQueue()功能,如{{1}}所述{3}}

答案 2 :(得分:1)

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

我找到了解决方案here:增加parallelUploads。我现在以下列方式创建dropzone:

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

答案 3 :(得分:1)

遇到相同的问题,只需将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,我不知道为什么,但是只要将它们放在dropzone上,我的前两个文件就开始上传,即使使用autoProcessQueue:false。

然后我只添加autoDiscover:false,从那里一切正常!

好看!

答案 4 :(得分:0)

我可以看到这是一篇非常古老的文章,但是,我会回答,希望它可以对某人有所帮助。

2个请求

  
      
  1. 选项-没有文件
  2.   
  3. POST-带有文件
  4.   

Chrome会执行飞行前请求(OPTIONS)以查找CORS标头。这是几乎所有最新浏览器都遵循的标准。