首页 新闻 会员 周边 捐助

关于HttpWebRequest上传图片的问题

0
悬赏园豆:10 [已关闭问题] 关闭于 2016-09-09 10:17

关于HttpWebRequest上传图片的问题

请求报文如下

C#代码

     static void Main(string[] args)
        {
            string boundary = "----" + DateTime.Now.Ticks.ToString("x2");

            StringBuilder sb = new StringBuilder();
            sb.Append("--" + boundary + "\r\n");
            sb.AppendFormat("Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"\r\n", "888.jpg");
            sb.Append("Content-Type: image/jpeg\r\n\r\n");

            //sb.Append("--" + boundary + "--");  //加了这句服务端图片显示不了

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:6743/upload.ashx");
            req.ContentType = "multipart/form-data; boundary=" + boundary;
            req.Method = "POST";

            Stream reqStream = req.GetRequestStream();

            reqStream.Write(Encoding.UTF8.GetBytes(sb.ToString()),0, Encoding.UTF8.GetBytes(sb.ToString()).Length);

            FileStream fileStream=new FileStream("888.jpg", FileMode.Open, FileAccess.Read);

            byte[] buffer = new byte[(int)fileStream.Length];

            int bytecount = 0;
            while ((bytecount=fileStream.Read(buffer,0,buffer.Length))!=0)
            {
                reqStream.Write(buffer,0,bytecount);
            }

            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
            boundary + "\r\n");
            reqStream.Write(boundarybytes, 0, boundarybytes.Length);
          

            reqStream.Dispose();


            string ssss=new StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd();

            Console.ReadKey();

        }

我想问的问题就是,请求报文里圈出来的那个 要不要用 stringbuilder 加入进去,我不加入的话服务端可以接收到文件 并成功打开,
但加入的话 服务端可以接收到文件,但无法打开图片

KotobukiTsumugi的主页 KotobukiTsumugi | 初学一级 | 园豆:23
提问于:2016-09-07 21:57
< >
分享
所有回答(3)
0

不用加,那只是一个分隔符,按照你的方式加了那就把这个信息夹到图片中去了,当然打不开

Daniel Cai | 园豆:10424 (专家六级) | 2016-09-08 10:55

那你的意思是最后一句不用加 ,
前面需要加

支持(0) 反对(0) KotobukiTsumugi | 园豆:23 (初学一级) | 2016-09-08 10:56

@扶着往事走: 都不需要

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-09-08 11:03

@Daniel Cai: 可是我参照网上的例子都加了阿?
能看看你是怎么做的吗?

支持(0) 反对(0) KotobukiTsumugi | 园豆:23 (初学一级) | 2016-09-08 11:04

@扶着往事走: 这只是浏览器发送请求自己加的,你没必要画蛇添足自己加一个。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-09-08 11:08

@Daniel Cai: 能看看你是怎么做的吗?
我这是模拟请求报文,不通过浏览器的

支持(0) 反对(0) KotobukiTsumugi | 园豆:23 (初学一级) | 2016-09-08 11:08
0

请求报文chrome没获取全

KotobukiTsumugi | 园豆:23 (初学一级) | 2016-09-09 10:16
0

// sb.Append("--" + boundary + "--");
// 加了这句服务端图片显示不了
// ** 这个是整个 post data block 的结束标志,应出现在末尾(先写入图片内容)。
//一个 POST block 的例子:
//
//-----------------------------7e4e9e500a8
//Content-Disposition: form-data; name="title"
//
//hghg
//-----------------------------7e4e9e500a8
//Content-Disposition: form-data; name="upfile"; filename="C:\text1.txt"
//Content-Type: text/plain
//
//filecontent
//-----------------------------7e4e9e500a8--

capital2012 | 园豆:265 (菜鸟二级) | 2020-06-14 16:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册