Javascript 排队异步HTTP文件上载

Javascript 排队异步HTTP文件上载,javascript,http,file-upload,Javascript,Http,File Upload,有没有一种方法可以不借助Flash或Silverlight,只使用巧妙使用的表单和JavaScript,将文件上传排队?注意,上传应该异步执行 通过“排队”上传,我的意思是,如果用户试图上传多个文件,它们不应该同时传输,而应该在一个HTTP连接中一次传输一个文件。我以前见过使用的一个选项,尽管我没有链接或示例,就是使用iframe。基本上,文件被提交到iframe,JavaScript监视该iframe何时重新加载,然后提交下一个iframe。它并不漂亮,我想我已经尝试过了,但无法在浏览器间运行

有没有一种方法可以不借助Flash或Silverlight,只使用巧妙使用的表单和JavaScript,将文件上传排队?注意,上传应该异步执行


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

我以前见过使用的一个选项,尽管我没有链接或示例,就是使用iframe。基本上,文件被提交到iframe,JavaScript监视该iframe何时重新加载,然后提交下一个iframe。它并不漂亮,我想我已经尝试过了,但无法在浏览器间运行(当时我需要它,包括IE6)。

我有一个很好的授权,这非常好。此外,它本机支持队列。一个简单的示例,假设您已经创建了一个id为“foo”的表单“file”元素和一个id为“queue”的用作队列的元素。有关更多信息,请参阅

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

从广义上看,需要做什么:

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

这是我现在能想到的简单逻辑[回家后必须编码]。

由于规范的限制,我不相信在单个HTTP连接上可以做到这一点。 但是,通过将
字段放在单独的表单中(无论是HTML还是JavaScript)并按顺序提交,您可能会得到几乎相同的行为

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

补充说明:

  • 有关针对iFrame的参考,请参阅。请注意,HTML/XHTML中不支持此功能
  • form.target
    属性必须等于
    iframe.name
    属性
    iframe.id
    将不起作用;它会在IE6和FF3.5中出现一个弹出窗口
  • 一个使用目标定位的“一次完成”上传的工作示例可用。我对这个例子做了一些清理并使用了它。它适用于IE6以及任何一流的浏览器

如果您正在寻找.Net,更具体地说是Asp.Net MVC解决方案,请看这篇文章。我把它放在书签里作为参考。

这个jquery插件声称它不使用swf

使用xmlhttprequest异步上传文件有一种简单有效的方法:请参阅“在Firefox 3.5及更高版本中”一节。有了它,你可以异步上传文件,也可以获得上传的进度百分比。使用firefox 3.6及更高版本,您还可以异步上传多个文件。我正在以一种更简单的方式制作一个js函数,完成后我会发布它。

最近,我编写了一个jQuery插件,允许您执行类似的操作。我不能发布代码,但我可以描述它是如何工作的。如果没有道理,让我知道,因为这已经有一段时间了

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


Erick

它必须是一个HTTP连接吗?是的。这就是我问题的重点。问题:如果你提交一个包含多个文件的表单,它们是同时发送的,还是一个接一个地发送的?由于我的应用程序的特殊性,不可能将所有要上载的文件添加到同一表单中,因为第一个文件应该在用户选择后立即开始上载。也就是说,不应该有“开始上传”按钮,队列应该自动进行。上传需要Flash,而我正在寻找一个不需要的解决方案。哦,对了。对不起,我完全忘记了那个要求。出于好奇,你为什么要避免闪光灯?Uploadify不需要与flash进行任何交互,它为您包装了它。由于所讨论的web应用程序的特殊性,其卖点之一是它根本不需要插件来完成任何实际工作。由于上传文件是其中一项相当重要的任务,我宁愿避免依赖Flash.interest。我很想知道你的目标受众是什么,如果你希望他们中有合理数量的人没有flash。如果它是针对iphone或ipad的,这是有道理的,但我会惊讶地听到它们支持文件上传。你能提供更多的信息吗?好的,谢谢。我将努力实施它。你还记得你遇到过哪些浏览器的问题吗?我相信最难的是IE6,还有其他IEs,但我认为7和8还可以。已经有一段时间了,我删除了我所有的测试代码,因为我可以使用Flash,因为它已经在网站的其他地方使用过了。让我知道它是否适合你。我自己也想过尝试这样的东西,但没有时间。