【问题标题】:Http and file uploading - How does it really work (under the hood)Http 和文件上传 - 它是如何工作的(幕后)
【发布时间】:2009-06-25 00:35:59
【问题描述】:

好吧,这似乎有点像一个菜鸟问题,但我认识的许多 Web 开发人员并没有完全理解。

基本上如何通过 FileUpload 控件的上传事件将文件从网页文件输入框上传到网络服务器(例如托管 .net 站点)?

我的理解是,向服务器发送了一条请求流的帖子,然后将其传递回浏览器并开始将数据流传输到服务器。

我的朋友说他的理解是整个文件被浏览器编码到发布请求中,然后(大量)帖子被发送到服务器。

我认为这不可能是这样,因为服务器在收到整个帖子之前无法做任何事情,因此无法构建 ajax 进度条只需将文件保存到其磁盘即可。

那么它实际上是如何从浏览器到服务器的呢?

【问题讨论】:

    标签: .net html http file-io streaming


    【解决方案1】:

    你的朋友是对的。如果你想要一个 AJAX 进度条,你必须跳过一些障碍。

    通常,该技术是将 iframe 中的上传内容发布到服务器上的 IHttpHandler,该处理程序将服务器上的进度存储在服务器范围的字典中,该字典由客户端组成的标识符作为键控,并包含在 AJAX 进度请求和上传帖子。这样,当客户端发出 AJAX 请求时,处理该请求的服务器代码可以从该字典中读取值,以查看服务器已处理了多少字节的文件 POST 请求。

    是的,这很复杂:)

    【讨论】:

    • 我认为这是有道理的,但它表明 httphandler 在网络级别上工作并且可以检测到部分帖子的传入数据包?
    • HttpHandlers 不能“在网络级别”工作,但它们可以在比标准页面更低的级别工作。在普通页面上,直到 POST 完全加载到服务器上,您的事件处理代码才会运行。在 IHttpHandler 中,您可以在数据到达时对其进行处理,但您会丢失页面生命周期为您执行的所有自动操作。
    【解决方案2】:

    我认为你的朋友是对的,文件被编码到发送到服务器的帖子中。如果你真的想看看它是如何工作的,请尝试在 Firefox 中使用Tamper Data 来查看实际的帖子数据。

    预计到达时间:

    您提到的 AJAX 样式上传工作通过在隐藏的 iframe 中进行发布,然后使用 AJAX 请求检查服务器端的上传进度。

    【讨论】:

    • 好吧,我的伙伴说的我​​很确定是对的,但 httphandler 肯定必须收到帖子才能做任何事情?到了这个时候,它已经有了整个帖子。还是 httphandler 在网络级别工作并拦截数据包你能进一步解释吗?
    • 一些服务器可以在读取头部之后但在读取数据之前开始处理请求。我使用的一些框架将请求的主体作为流提供(除非标头等被解析)。当然,大多数请求处理程序在请求被完全读取之前不会发回响应。
    • 我不确定整个帖子是否已在您的 httphandler 上调用 ProcessRequest() 时下载,但我找不到任何真实的文档来说明一种或另一种方式。
    • 这是我遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2011-02-13
    • 2018-10-10
    相关资源
    最近更新 更多