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 加入进去,我不加入的话服务端可以接收到文件 并成功打开,
但加入的话 服务端可以接收到文件,但无法打开图片
不用加,那只是一个分隔符,按照你的方式加了那就把这个信息夹到图片中去了,当然打不开
那你的意思是最后一句不用加 ,
前面需要加
@扶着往事走: 都不需要
@Daniel Cai: 可是我参照网上的例子都加了阿?
能看看你是怎么做的吗?
@扶着往事走: 这只是浏览器发送请求自己加的,你没必要画蛇添足自己加一个。
@Daniel Cai: 能看看你是怎么做的吗?
我这是模拟请求报文,不通过浏览器的
// 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--