苏飞论坛

标题: 请问一下怎样拼接multipart/form-data这种数据格式? [打印本页]

作者: chinaceo    时间: 2015-3-4 16:28
标题: 请问一下怎样拼接multipart/form-data这种数据格式?
本帖最后由 chinaceo 于 2015-3-4 16:29 编辑



请问一下怎样拼接multipart/form-data这种数据格式?

------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="Filename"

d833c895d143ad4bd45997dc81025aafa40f06b2.jpg
------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="PHPSESSID"

uo9jslgks5mvpu1f577maivs74
------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="Filedata"; filename="d833c895d143ad4bd45997dc81025aafa40f06b2.jpg"
Content-Type: application/octet-stream

------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="Filename"

d833c895d143ad4bd45997dc81025aafa40f06b2.jpg
------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="PHPSESSID"

uo9jslgks5mvpu1f577maivs74
------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="Filedata"; filename="d833c895d143ad4bd45997dc81025aafa40f06b2.jpg"
Content-Type: application/octet-stream

这里是图片的二进制,这里显示不出来,所以我用文字代替了.


------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5
Content-Disposition: form-data; name="Upload"

Submit Query
------------ei4ei4ae0Ef1Ij5cH2cH2cH2ae0Ij5--


我在程序中
Method = "post",
Postdata = postfile,
PostDataType = PostDataType.FilePath,
ContentType = "multipart/form-data"


ContentType我已经有设置了,但只是这有个问题,因为postdata 只读取的文件的数据,那像其他的Content-Disposition: form-data; name="Upload"等这些数据如何拼接进去呢?



手动上传抓包如图,但是万能框架只发送了图片的数据,所以根本就上传成功不了图片.如果我理解错了,能否给一个小小示例.谢谢.
作者: 站长苏飞    时间: 2015-3-4 16:31
PostDataType = PostDataType.FilePath,//默认为传入String类型,也可以设置PostDataType.Byte传入Byte类型数据

PostdataByte = System.Text.Encoding.Default.GetBytes("测试一下"),//如果PostDataType为Byte时要设置本属性的值

这教程里写的很清楚,咋都不看呢

作者: 站长苏飞    时间: 2015-3-4 16:31
http://www.sufeinet.com/thread-9993-1-1.html


http://www.sufeinet.com/thread-9994-1-1.html
作者: chinaceo    时间: 2015-3-4 16:53
PostDataType 设置为 PostDataType = PostDataType.Byte 吗?

Postdata =System.Text.Encoding.Default.GetBytes( 前面字符串)+ System.Text.Encoding.Default.GetBytes(文件<这个文件需要用StreamReader读取出来>) + System.Text.Encoding.Default.GetBytes(后面字符串)  ?

这两教程我真看了很多次,关键我是分开看的,真没有把联系起来.我现在初步想法是这样,对吗?我先试试吧.
作者: 站长苏飞    时间: 2015-3-4 16:55
StreamReader不用读,直接写路径,我里面会自动读

你看说明,你鼠标放上去都有说明的
作者: chinaceo    时间: 2015-3-4 17:02
本帖最后由 chinaceo 于 2015-3-4 17:04 编辑

[C#] 纯文本查看 复制代码
 if (request.Method.Trim().ToLower().Contains("post"))
            {
                if (item.PostEncoding != null)
                {
                    postencoding = item.PostEncoding;
                }
                byte[] buffer = null;
                //写入Byte类型
                if (item.PostDataType == PostDataType.Byte && item.PostdataByte != null && item.PostdataByte.Length > 0)
                {
                    //验证在得到结果时是否有传入数据
                    buffer = item.PostdataByte;
                }//写入文件
                else if (item.PostDataType == PostDataType.FilePath && !string.IsNullOrWhiteSpace(item.Postdata))
                {
                    StreamReader r = new StreamReader(item.Postdata, postencoding);
                    buffer = postencoding.GetBytes(r.ReadToEnd());
                    r.Close();
                } //写入字符串
                else if (!string.IsNullOrWhiteSpace(item.Postdata))
                {
                    buffer = postencoding.GetBytes(item.Postdata);
                }
                if (buffer != null)
                {
                    request.ContentLength = buffer.Length;
                    request.GetRequestStream().Write(buffer, 0, buffer.Length);
                }
            }


但我在万能框架,只看到这些代码,如果直接填路径的话,不行的吧.PostDataType只能设置三种情况中的一种的.没有字符串与文件进行拼接的选项吧?
作者: 站长苏飞    时间: 2015-3-4 17:04
同时只能有一种,你上面的逻辑是对的,我看错了,都转为Byte就行了,
作者: songwenqi    时间: 2015-3-4 17:10
路过!!!!
作者: cload    时间: 2015-3-4 19:20
http://www.sufeinet.com/thread-9495-1-1.html




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4