在通过HTTP上传到Windows机器上时,有没有办法“查看”文件?

时间:2010-03-19 17:41:20

标签: http file-upload preview peek

我需要向ASP.NET网站添加文件上传功能,并希望能够在服务器上传文件的一小部分时继续上传。窥视或预览类型功能,以便我可以确定内容并在用户仍在上传时给予一些反馈(我们在这里谈论大文件)。有没有办法做到这一点?我想最糟糕的情况是编写一个自定义控件,一旦选择就上传文件的固定字节数,然后在封面下开始另一个上传完整文件。不完全确定即使这是可能的,但无论如何我正在寻找更优雅的解决方案......谢谢!

2 个答案:

答案 0 :(得分:1)

听起来你想在大文件上传期间避免“白屏死机”。如果是这样,您可能需要查看Telerik's RadUpload control,它会在上传过程中提供进度条。

如果你想自己动手,我会反复试用他们的试用版。我以这种方式偷看了他们的来源,他们通过自定义HttpModule和HttpHandler以及他们的控件的组合来完成进度条。处理程序以流式方式路由文件,而模块提供“完成百分比”信息 - 或者反过来;我看了几年已经有几年了。

修改

  

实际上,我正在尝试进行服务器端处理,因为文件仍在上传。我想通过HTTP导入用户数据,但是想要向用户提供预览/选项,说明在文件仍在上传时我们如何处理他们的数据(列定义等)。无论如何,我们将按原样获取文件,因此不需要中断上传。鉴于我实际上希望在上传过程中基于在上传时读取文件的相对较小部分进行交互,您是否还会推荐相同的方法?

嗯......它很难做到,而且可能无法跨浏览器工作,但可以通过这种方法完成。

由于完全有可能像我提到的那样将传入文件作为流来处理,因此您可以让初始处理更新一些状态作为流处理的一部分。如果您不作为流进行处理,则必须等待完整文件上载,然后才能对其执行任何操作。

问题在于:在文件上传期间,您无法再进行基于HTML的交互。帖子必须继续不减,否则上传将失败。我链接的控件只能工作,因为大多数浏览器允许javascript在帖子期间继续执行和更新页面DOM。

因此,为了使这项工作,您必须在HttpModule中的文件处理期间更新一些标准化的状态服务器端,HttpModule通过HttpHandler处理的XmlHttpRequest调用传回客户端。您必须使用纯javascript / DOM来更新用户的UI。

所以,正如我所说,它很复杂,可能是跨浏览器的错误,但理论上可以完成。

有些修饰可能更稳定,但可能不一定可行:您可以构建一个ActiveX控件或Click-Once .NET应用程序,在上载之前对文件进行预处理,甚至可以异步传输文件用户继续浏览。有些用户可能不喜欢这个选项,我不知道您的部署方案的细节,但它是一个选项。

答案 1 :(得分:0)

HTTP HEAD方法但不是PEEK

HEAD会为您提供有关该文件的信息和标题。

当然,您可以创建一个特殊的请求处理程序来执行您想要的任何操作。您不必使用静态资源,可以动态创建所需的任何响应。