【问题标题】:Is there any way to "peek" at a file while it's uploading through HTTP onto a Windows box?在通过 HTTP 将文件上传到 Windows 框时,有什么方法可以“偷看”文件吗?
【发布时间】:2010-03-19 17:41:19
【问题描述】:

我需要向 ASP.NET 网站添加文件上传功能,并希望能够在服务器上的文件仍在上传时读取文件的一小部分。一个窥视或预览类型的功能,这样我就可以确定内容并向用户提供一些反馈,同时它仍在上传(我们在这里讨论的是大文件)。有没有办法做到这一点?我正在考虑编写一个自定义控件的最坏情况,该控件一旦选择就只上传固定数量的文件字节,然后在幕后开始另一个完整文件的上传。甚至不完全确定这是可能的,但无论如何我正在寻找更优雅的解决方案......谢谢!

【问题讨论】:

  • 为了他人的利益,我们最终购买了一个名为 ScaleUP(我与该公司没有任何隶属关系)的第三方解决方案,它运行得非常好,让我们编写了一个简单的过滤器来查看上传流。这是一个仅限 IIS7 的解决方案,但我强烈推荐该产品和支持人员。

标签: http file-upload preview peek


【解决方案1】:

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

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

编辑:

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

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

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

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

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

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

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

【讨论】:

  • 实际上,我正在尝试进行服务器端处理,因为文件仍在上传中。我想通过 HTTP 导入用户数据,但想在文件仍在上传时向用户展示我们将如何处理他们的数据的预览/选项(列定义等)。无论如何,我们将按原样获取文件,因此不需要中断上传。鉴于我实际上希望在上传期间基于读取文件上传时相对较小的部分进行交互,您是否仍会推荐相同的方法?
  • @iisystems:我更新了我的答案以回应您的评论。
  • 这里肯定有一些挑战,但这非常有帮助。再次感谢 Randolpho!
  • 没问题。很高兴我能帮上忙。
【解决方案2】:

有一个HTTP HEAD 方法,但没有PEEK

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多