排队异步HTTP文件上载

时间:2010-02-27 19:30:00

标签: javascript http file-upload

有没有办法在不使用Flash或Silverlight的情况下排队文件上传,只需使用巧妙使用的表单和JavaScript?请注意,上传应该异步执行。

通过“排队”上传,我的意思是,如果用户尝试上传多个文件,则不应同时传输它们,而应在一个HTTP连接中一次传输一个。

8 个答案:

答案 0 :(得分:2)

我有良好的权威,Uploadify非常好。而且,它本身支持队列。一个简单的例子,它假设你已经创建了一个id为“foo”的表单“file”元素和一个用作id为“queue”的队列的元素。有关详细信息,请参阅docs

$("foo").uploadify({
  'uploader'  : 'uploadify.swf',
  'script'    : 'uploadify.php',
  'cancelImg' : 'cancel.png',
  'auto'      : true,
  'folder'    : '/uploads',
  'queue'     : "queue"
});

答案 1 :(得分:2)

由于规范的限制,我认为不可能在单个HTTP连接上执行此操作。 但是,您可以通过将<input>字段放在单独的表单(使用HTML或JavaScript)并按顺序提交它们来获得几乎相同的行为。

将目标放在<iframe>上并使用iframe.onload事件触发列表中的下一个表单。

附加说明:

  • 有关参考定位的iframe,请参阅this。请注意,HTML / XHTML Strict中不支持此功能。
  • form.target属性必须等于iframe.name属性。 iframe.id无效;它会在IE6和FF3.5中生成一个弹出窗口。
  • 使用定位“一次性”上传的工作示例here。我已经清理了这个例子并使用了它。它适用于IE6以及任何一流的浏览器。

答案 2 :(得分:1)

我之前看过的一个选项,虽然我没有链接或示例,但使用的是iframe。基本上,文件被提交到iframe和JavaScript监视,以查看iframe何时重新加载,然后提交下一个iframe。它并不漂亮,我认为我尝试过,但无法让它在浏览器中运行(我当时需要它,包括IE6)。

答案 3 :(得分:0)

广泛地看待它,需要做些什么:

  • 使用输入类型作为文件动态添加表单(到html)的函数。一个表单只有一个文件输入字段。这些表单将是我们的文件上传队列。
  • 提交函数,将异步提交这些表单。

这是我现在可以想到的简单逻辑[当我回到家时必须编码]。

答案 4 :(得分:0)

如果您正在寻找.Net,更具体地说是Asp.Net MVC解决方案,请看一下这篇文章http://dimebrain.com/2010/01/large-or-asynchronous-file-uploads-in-asp-net-mvc.html。我把它标记为可供参考。

答案 5 :(得分:0)

这个jquery插件声称没有使用swf http://valums.com/ajax-upload/

答案 6 :(得分:0)

有一种简单有效的方法可以使用xmlhttprequest异步上传文件:请参阅“在Firefox 3.5及更高版本”部分中的https://developer.mozilla.org/en/using_xmlhttprequest。有了这个,您可以上传文件asyncronysly获取上传的进度百分比。使用firefox 3.6及更高版本,您还可以上传asyncronyly多个文件。我正在以更简单的方式制作一个js函数,完成后我会发布它。

答案 7 :(得分:0)

在最近的过去,我写了一个jQuery插件,可以让你做这样的事情。我无法发布代码,但我可以描述它是如何工作的。如果它没有意义,请告诉我,因为它已经有一段时间了。

有一组上传表单元素。选择文件后,它会发布到隐藏的iFrame,其内容(通过base64)被复制到隐藏的表单字段中。然后,当提交最终表单时,隐藏表单字段的内容用于获取文件信息。

埃里克