使用Web表单通过HTTP POST上传文件的最佳方法是什么?

时间:2008-08-15 04:54:06

标签: html http forms post upload

基本上,比这更好的东西:

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

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

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

对于不使用Flash或Java有什么好的解决方案吗?

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

4 个答案:

答案 0 :(得分:9)

如果您不想涉及其他技术(如Flash,Java或ActiveX),我们目前就位于文件上传框中。

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

如果您愿意使用Flash(几乎可以在任何地方和许多平台上使用),您可以克服几乎所有这些问题。一个快速的Google搜索显示了two such个组件,这两个组件都是免费的开源。我从来没用过任何一种,但看起来很棒。顺便说一句,Flash也不是没有问题,例如当使用多文件上传器进行幻灯片共享时,浏览器不停地让我崩溃: - (

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

HTH

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这里的问题是浏览器专门阻止任何改变基本文件上传输入控件的东西。例如,您无法使用javascript更改它。

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

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

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

我想看到那个垃圾“浏览”按钮 - 它告诉我,我不会让任何意想不到的东西。

答案 3 :(得分:0)

确实,文件上传控制肯定落后于时代。希望这将在未来的asp.net版本中得到解决。

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