使用 Web 表单通过 HTTP POST 上传文件的最佳方式是啥?

Posted

技术标签:

【中文标题】使用 Web 表单通过 HTTP POST 上传文件的最佳方式是啥?【英文标题】:What is the best way to upload a file via an HTTP POST with a web form?使用 Web 表单通过 HTTP POST 上传文件的最佳方式是什么? 【发布时间】:2010-09-05 22:24:35 【问题描述】:

基本上,比这更好:

<input type="file" name="myfile" size="50">

首先,browse 按钮在每个浏览器上看起来都不同。与表单上的 submit 按钮不同,您必须想出一些 hack-y 的方式来设置它的样式。

其次,没有进度指示器显示文件已上传多少。您通常必须实现某种客户端方式来禁用多个提交(例如,将提交按钮更改为显示“表单提交...请稍候。”的禁用按钮)或发出巨大的警告。

有没有不使用 Flash 或 Java 的好的解决方案?

Yaakov:该产品看起来正是我想要的,但成本是 1000 美元,而且它专门用于 ASP.NET. 是否有任何开源项目涵盖相同或相似的功能?

【问题讨论】:

【参考方案1】:

如果您不想涉及 Flash、Java 或 ActiveX 等其他技术,我们目前可以使用文件上传框。

使用纯 html,您几乎只能获得所描述的体验(没有进度条、重复提交等)。如果您愿意使用一些 javascript,您可以通过提供上传正在进行的反馈甚至showing the upload progress 来解决一些问题(这是一个 hack,因为您不应该进行完整的往返服务器并返回,但至少它可以工作)。

如果您愿意使用 Flash(几乎可以在任何地方和许多平台上使用),您几乎可以克服所有这些问题。快速谷歌搜索出现了twosuch 组件,它们都是免费开源的。我从来没有用过它们,但它们看起来不错。顺便说一句,Flash 也不是没有问题,例如在使用多文件上传器进行幻灯片共享时,浏览器一直在我身上崩溃:-(

目前最好的解决方案可能是动态检测用户是否有 Flash,如果有,给她上传器的 Flash 版本,同时仍然可以选择基本的 HTML 版本。

HTH

【讨论】:

【参考方案2】:

您可以查看Fancy Upload 脚本。虽然它使用闪光灯,但它看起来仍然很棒。

【讨论】:

【参考方案3】:

这里的问题是浏览器专门阻止任何更改基本文件上传输入控件的内容。例如,您不能使用 javascript 更改它。

原因是安全性 - 如果我可以编写脚本,我可以构建一个页面,当您访问它时,它会从您的硬盘向我发送各种文件。不好看。

目前有多种解决方法,但在 IE 和 FX 之间有所不同(我不了解 Safari、Opera 等)。

查看http://www.gmail.com 在将内容附加到电子邮件时在 IE 和 FX 中的作用。

我想看看那个垃圾的“浏览”按钮——它告诉我我不会让任何意外的东西进入。

【讨论】:

【参考方案4】:

确实,文件上传控制绝对是落伍了。希望这将在未来的 asp.net 版本中得到解决。

虽然要花一些钱,但我发现 Telerik upload control 拥有您正在寻找的所有功能,包括样式和进度更新(它还优化了大型上传的内存)。

【讨论】:

以上是关于使用 Web 表单通过 HTTP POST 上传文件的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

POST提交数据方式

如何在 Python 中模拟 post 表单来上传文件

AFNetworking HTTP POST 上传图像在接近完成时停止

使用 HttpClient POST 通过上传提交表单

JAVA模拟HTTP post请求上传文件

通过 ajax POST 上传图片而不使用 HTML 表单