与现有表单很好地集成的多个文件上传器

Posted

技术标签:

【中文标题】与现有表单很好地集成的多个文件上传器【英文标题】:Multiple files uploader that integrates well with existing form 【发布时间】:2014-05-18 12:26:04 【问题描述】:

我知道这个问题可能太笼统了,但是花了一整天的时间后,我对这个问题很迷茫。

任何人都知道上传插件,可以轻松与现有表单集成

我尝试过的所有上传插件 - jQuery File Upload、Plupload、Uploadify、Dropzone.js - 非常适合文件提交,但无法集成到现有表单中 - 通常它们需要队列中的一些文件才能提交表单全部,提交其他表单字段等有麻烦。

我需要一些简单的东西:用户填写表单,将文件拖放到 dropzone 上(或者不提交,如果他不想提交任何文件)并提交表单。我什至不需要 Ajax 表单提交(尽管我很想拥有它)。

有什么建议吗?

【问题讨论】:

看看Fine Uploader。它具有使与现有表单的集成变得简单而强大的功能。您可以在docs.fineuploader.com/branch/master/features/forms.html 阅读有关该特定功能的更多信息。全面披露:我是该产品的开发人员。 谢谢!这看起来真的很酷。它是否只是将文件添加到队列中并在用户提交表单时提交? 它将寻找表单提交作为上传文件的提示。实际上,它会拦截表单提交,然后在不刷新页面的情况下上传包含任何表单数据的文件。下面的答案没有处理的另一件事是:它将尊重您放置在表单元素上的任何 html5 表单验证属性。如果您有兴趣,我链接到的文档详细介绍了所有这些内容。 我看到了文档,谢谢。我目前在我的表单中使用 jQuery Validate。是否可以使用它的submitHandler 通过 Ajax 提交数据?还是有其他方法可以通过 Ajax 提交整个表单?基本上,我需要的是通过 POST 在一次运行中提交所有表单数据和文件——在我的 php 代码中,我首先在 db 中创建记录,而不是通过它的 REST API 将文件上传到 SugarCRM。 好的,谢谢,我试试看。 【参考方案1】:

如果你不想使用 Ajax 文件上传,那么你不需要使用任何插件。只需使用简单(默认)的表单提交(输入提交点击)。

这就像添加更多输入字段:

<input type="file" name="somename" />
<input type="file" name="somename2" />

现在在服务器端,您需要为每个文件循环。我在 ASP.NET 方面做得更好,所以我会告诉你如何在 ASP.NET 中做到这一点,如果你使用其他语言,你可能仍然会得到主要的技巧或想法。

for(int i =0; i < numFiles; i++) 
    var uploadedFile = Request.Files[i];
    /* save it! */

上面提到的是一个 for 循环,您在其中循环等于与 HttpRequest 一起发送的文件数。你得到每个文件并做你想做的事。

这个很简单!您可以将代码更改为您自己的语言,例如 PHP 等。

【讨论】:

谢谢。好吧,我很想拥有插件提供的拖放、进度条和其他功能——这就是我仍在寻找插件的原因(目前只使用&lt;input type="file" multiple&gt; 插件永远是一件完美的事情!是的,这也很完美。 :)【参考方案2】:

去掉额外功能后,AJAX 文件上传相当容易:

var fd = new FormData(form);

var xhr = new XMLHttpRequest();

xhr.upload.addEventListener("progress", function(e) 
    // Handle progress
, false);

xhr.addEventListener("load", function(e) 
    if( xhr.status == 200 ) 
        // Handle success
     else 
        // Handel error
    
, false);

xhr.addEventListener("error", function(e) 
    // Handle error
, false);

xhr.addEventListener("abort", function(e) 
    // Handle abort
, false);

try 
    xhr.open('POST', 'http://server.com/uploader.php', true);
    xhr.send(fd);
 catch(e) 
    // Handle error

【讨论】:

以上是关于与现有表单很好地集成的多个文件上传器的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 媒体上传器无法正确上传

Jasny 与其他表单元素一起上传多个文件

服务器上的文件上传 404 错误

如何将自定义文件浏览器/上传与 CKEditor 集成?

如何对 Web 表单文件上传进行压力测试?

Django 静态与用户上传的文件