c# Post提交图片
根据给定的信息,本文将详细解释如何在C#中通过HTTP POST请求提交图片,并解析相关的代码片段。 ### C# Post提交图片 #### 一、基础知识介绍 在Web开发中,客户端经常会向服务器发送图片等多媒体文件。这通常通过HTTP POST请求实现。在C#中,我们可以使用`System.Net`命名空间下的`HttpWebRequest`类来创建和发送POST请求。下面详细介绍具体的步骤和技术要点。 #### 二、准备工作 1. **引用必要的命名空间**: ```csharp using System; using System.IO; using System.Net; using System.Text; ``` 2. **设置请求参数**: - URL:指定接收POST数据的服务器地址。 - ContentType:设置请求头中的ContentType为`multipart/form-data`,这是发送文件时的标准格式。 - Content-Length:计算文件的实际大小作为Content-Length的值。 #### 三、代码解析 1. **创建HTTP请求**: ```csharp HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; ``` 上述代码创建了一个`HttpWebRequest`对象,并设置了请求方法为POST以及Content-Type。需要注意的是,这里设置的Content-Type并不是发送图片的标准格式`multipart/form-data`,而是用于提交表单数据的`application/x-www-form-urlencoded`。如果要发送图片,应该使用`multipart/form-data`。 2. **读取图片数据**: ```csharp FileStream oStream = new FileStream(path, FileMode.Open, FileAccess.Read); BinaryReader oReader = new BinaryReader(oStream); byte[] imgdata = oReader.ReadBytes((int)oStream.Length); ``` 这里使用了`FileStream`和`BinaryReader`来读取图片数据到一个字节数组中。路径`path`应该是图片文件的绝对路径。 3. **组合请求数据**: ```csharp byte[] SomeBytes = Encoding.ASCII.GetBytes(postDataStr); byte[] data = new byte[postDataStr.Length + imgdata.Length]; SomeBytes.CopyTo(data, 0); imgdata.CopyTo(data, postDataStr.Length); ``` 这段代码将文本数据(`postDataStr`)和图片数据(`imgdata`)合并到了同一个字节数组中。注意,实际发送时还需要构造正确的`multipart/form-data`格式的数据体。 4. **发送POST请求**: ```csharp request.ContentLength = data.Length; Stream newStream = request.GetRequestStream(); newStream.Write(data, 0, data.Length); newStream.Close(); ``` 这里设置了请求体的长度,并通过`GetRequestStream()`方法获取了一个流对象,然后将数据写入该流并关闭它。 5. **处理响应**: ```csharp HttpWebResponse httpWebResponse = (HttpWebResponse)request.GetResponse(); Stream s = httpWebResponse.GetResponseStream(); StreamReader reader = new StreamReader(s, Encoding.GetEncoding("utf-8")); string respText = reader.ReadToEnd(); s.Close(); ``` 获取响应后,通过`GetResponse()`方法读取响应流,并转换成字符串形式。 #### 四、注意事项 1. **Content-Type**:如上所述,对于图片的发送,应使用`multipart/form-data`而不是`application/x-www-form-urlencoded`。 2. **数据格式**:需要按照`multipart/form-data`格式构建请求体,通常包含一个边界字符串来区分不同的部分。 3. **错误处理**:示例代码中没有包含错误处理逻辑,在实际应用中应加入异常捕获和处理。 #### 五、总结 本篇文章详细介绍了如何在C#中通过HTTP POST请求提交图片,并对示例代码进行了深入解析。需要注意的是,示例中的代码在发送图片时存在一定的问题,特别是关于Content-Type的设置和请求体格式的构造。希望读者能够结合实际需求进行调整和完善。
{
Stream oStream;
BinaryReader oReader;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";//表头的格式必须要写,否则请求响应的页面得不到要传递的值
byte[] SomeBytes = Encoding.ASCII.GetBytes(postDataStr);//传递的值
oStream = new FileStream(@"E:/Work/SC58Service/SC58Service/Styles/n_s02611398469419728014.jpg", FileMode.Open, FileAccess.Read); oReader = new BinaryReader(oStream);
byte[] imgdata = oReader.ReadBytes(Convert.ToInt32(oStream.Length));byte[] data = new byte[postDataStr.Length + imgdata.Length];
SomeBytes.CopyTo(data, 0);
imgdata.CopyTo(data, postDataStr.Length);
request.ContentLength = SomeBytes.Length;
Stream newStream = request.GetRequestStream();//把传递的值写到流中
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();//必须要关闭请求
HttpWebResponse httpWebResponse = null;
httpWebResponse = (HttpWebResponse)request.GetResponse();
Stream s = httpWebResponse.GetResponseStream();
StreamReader reader = new StreamReader(s, Encoding.GetEncoding("utf-8"));
string respText = reader.ReadToEnd();
s.Close();
return respText;
}
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页