我不想使用 jQuery,但我想使用 Ajax 进行文件上传。那可能吗?
如果是这样,我在哪里可以找到有关它的信息/教程?
不,不可能用 javascript 做到这一点。
但是,为了给人一种“AJAX”的感觉,您可以将表单提交到隐藏的 iframe 并将脚本结果输出到它,然后从那里进行处理。谷歌ajax iframe upload
并从那里开始。
如果您使用的是 jQuery, Form plugin
如果您的表单中有任何文件字段,它也会自动为您创建这个 iframe。我没有用它来做这件事,但我听说过好东西。
正如评论中所指出的,您还可以使用非常流行的东西SWFUpload
来实现 Flash 所需的效果。
万一有人在很久以后才发现这个问题:是的,现在 JavaScript 可以做到这一点。
HTML5 定义了 2 个新的 API,您可以一起使用它们来完成此操作:拖放 API 和文件 API。您可以使用 jQuery 与 API 进行有效交互,让人们拖放文件以进行上传。
这是有关如何执行此操作的教程。
该代码目前适用于 Chrome 6+ 和 Firefox 3.6+、Safari 6 和 IE 10。如果您需要 Safari 5 支持,代码几乎完全相同,但您使用 FormData 对象代替上传的文件列表(更多信息在邮政)。
Opera 从 11 开始支持 File API,但不支持 DnD API,drop 操作不会启动上传,但它们支持您使用 API 访问文件。我想他们将在 12 年完成对 DnD API 的支持。
2014 年 1 月 20 日更新:所有主流浏览器现在都实现了所有标准 API,因此本教程适用于所有浏览器。
我使用swfupload进行多个类似 ajax 的上传(基于它的 javascript/flash)
这里有一些关于 gmail 如何使用 iframe 的细节:
严格来说,有可能进行真正的 AJAX 文件上传,但这仅适用于 Firefox 3+、Safari 4 和 Chrome 2。在所有其他浏览器中,您必须使用 iframe 技术或基于 Flash 的上传器之类的解决方法。
假设您使用的是 Java,DWR 3.0 版(目前在 RC1 中)支持二进制文件上传/下载,这使问题变得非常简单。我还没有机会尝试这个,但我们广泛使用 DWR 并取得了完全的成功;它是一个很棒的 Ajax 工具包。
http://directwebremoting.org/blog/joe/2008/12/16/dwr_version_3_0_release_candidate_1.html
没有亲自使用过,但Ajax Uploader是我最近遇到的一个组件,它说它可以在 UpdatePanel 内进行文件上传(假设您使用的是 ASP.NET)。