【问题标题】:How to extract Data from a multipart Http Request?如何从多部分 Http 请求中提取数据?
【发布时间】:2013-03-12 09:11:45
【问题描述】:

我正在编写一个 HTTP 网络服务器。我的服务器必须处理 Http 多部分请求。在我之前的实现中,我借助请求的每个部分中存在的内容长度标头来提取数据。我使用的客户端在多部分请求中为每个部分(文件)提供内容长度标头。

但是另一个客户端没有给出每个文件的内容长度。在我的实现中,我使用 content-length 标头来提取那么多字节并将它们保存到文件中。

请告诉我现在如何提取数据。

我现在得到的标题是:

POST xxxxxxxxxxxxxxxxxxxxxxx&currentTab=PHOTOxxxxxxxxxxxxxxxx HTTP/1.1
Content-Length: 6829
Content-Type: multipart/form-data; boundary=SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj; charset=UTF-8
Host: host
Connection: Keep-Alive
User-Agent: Apache-HttpClient/xxxxxxxx
Accept-Encoding: gzip

--SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj
Content-Disposition: form-data; name="file"; filename="imagesCA5L2CL6_jpg(2)_jpg.jpg"
Content-Type: photo/jpg

**Some Data byte array**
--SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj--

在此请求中,部分数据中现在有 content-length 标头。

编辑:

之前此客户端用于在每个部分中发送内容长度标头。但由于某种原因,它不再发送它了。任何人都可以提出任何理由。

谢谢

【问题讨论】:

  • 你试过HttpContext.Current.Request.Files[0].InputStream; ?
  • 我没有使用任何 c# 类。我从必须解析的套接字获取原始数据。

标签: http multipartform-data http-protocols


【解决方案1】:

像这样:从 multipart/form-data POST 读取文件输入

Reading file input from a multipart/form-data POST

【讨论】:

    【解决方案2】:

    如果您想实现 HTTP/1.1 服务器,请查看 RFC 2616。有关如何确定消息长度的信息,请参阅section 4.4。如何实现multipart/form-data,请参阅RFC 2388

    真正的答案是:不要重新发明轮子,否则您将不得不重新实现几百页的 RFC。那里有大量的库和服务器。

    如果您确实想编写自己的 Web 服务器,例如作为练习,您应该已经找到了那些 RFC,对吧?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      相关资源
      最近更新 更多