Code Bye

HttpListener怎么读取客户端上传的文件

在winform中用HttpListener建立了一个服务端,在客户端用WebClient上传了文件,但是HttpListener里没有Files属性之类的来读取所上传的文件并写入目录,有什么其他的方法么?
百度找到的大多数都是基于Web的
解决方案

40

本人解析 multipart/form-data 其实并不复杂,其格式比较简单,你只要从获得的 post 来的 InputStream 中分割出内容,然后只取第一段,就能取到客户端提交的文件名、文件内容。
你可以花一天时间查询一下 rfc 1341/1867 中文版相关文档,先看文档,然后编写代码。大致最多有50行代码。本人编写一边,对原理掌握得比较清楚。
其流程简单来说,首先要判断 request.ContentType,假如其中含有 multipart/form-data,则按照 Multipart Content 模式来解析 INputStream 中的字节。
1. 查找  request.ContentType 中的 boundary= 部分,取得每一段内容的分隔符。
2. 读取字节,直到所读取的字节最后以  \r\n–[boundary]\r\n 结尾的块。
2.1 读取此 byte[] 的前面一些字节,知道看到两个 \r\n 结束。
2.2 以request.ContentEncoding 编码方式将其转换为 string,假如看到
Content-Disposition: form-data; name=”…….”;……
这样一行模式。使用 Split 函数就可以获得两个引号中间的那个文件名。
2.3 此 byte[] 中剩下的部分即为此名对应的值。
3. 循环处理2。直到最后的一个数据块只有两个字节代表字符 –,整个文件结束。
有时间本人可以写一个。你最好本人写一个,应该不超过50行代码。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明HttpListener怎么读取客户端上传的文件