手机版

ASP.NET从开机自检的数据流中提取参数和文件

时间:2021-10-24 来源:互联网 编辑:宝哥软件园 浏览:

模拟开机自检请求也是如此。但是有时候模拟的POST数据格式不是很标准(可能,研究的不太仔细),在服务器上无法获取数据。最近遇到这么麻烦的事情,数据是一个伙伴模拟POST得到的。无奈之下,我想出了一个馊主意,就是分析接收到的输入流,从中提取想要的数据。比如我上面提到的数据(两个参数,一个图片文件)

实现思路:读取输入流,通过分析非文件部分确定文件在整个流中的位置和大小,然后重新读取输入流得到文件。看看上面的POST数据,参数和分隔符等。说白了,都是字符串。基本上都是英文数字符号等。如果有中文,可以在发送之前做一些编码,这样基本上可以保证不会出现编码问题导致的计算错误(英文字符的所有代码都是一样的)。这部分内容(非文件部分,文件部分是二进制格式,不要这样做)可以获得。通过接受输入流并转换成字符串,如果参数中有中文,请注意客户端POST时使用什么编码:复制代码的代码如下:字节[] input=request。binaryread(请求。总字节数);字符串源=编码。UTF8.GetString(输入);然后通过正则表达式,匹配上面的非文件内容,这里省略,然后将得到的内容转换为byte[],并计算其长度。参数的值可以在这里得到。复制代码如下: Regex rginput=new Regex('省略');If (rginput。ismatch(source)){ int head length=编码。utf8。getbytes (rginput。匹配(来源)。value)},则用同样的方法计算结束。注意回车。这样就可以确定文件以外的部分在整个流中的大小,也就是说,文件在整个流中的位置和大小也是确定的。文件部分可以通过重新读取原始流获得。如果文件是文本类型的,可以像参数部分一样直接分析和获取,不需要这个。复制代码如下: //保存文件文件流FSS=新文件流('路径',文件模式。创建);fss。写(输入,标题长度,输入。长度-headLength-footLength);fss。close();复制代码代码如下: //获取文件字节数组byte [] img cont=new byte [input。长度-头长-脚长];MemoryStream ms=new MemoryStream(输入);//光标移动到文件ms.seek的开头(头长,seek origin . begin);ms . Read(img con,0,img con。长度);克洛斯女士();注意:这种方法有一定的风险,即确定文件的大小和位置,计算必须准确,对输入流的分析要周到全面;另外,当有多个上传的文件时,这种方法很麻烦.如果有更好的方法,可以留言交流。

版权声明:ASP.NET从开机自检的数据流中提取参数和文件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。