下面是详细的C# form-data上传图片流到远程服务器的攻略:
前提准备
在进行上传前需要确保满足以下条件:
- 需要有已经存在的图片文件或者是通过二进制转换后的图片流数据;
- 需要有正确的接口地址和接口方法,确保能够将图片数据发送到正确的服务器地址。
代码实现
1. 使用HttpWebRequest实现图片上传
使用HttpWebRequest进行图片上传的流程可以分为以下几个步骤:
- 对上传文件的内容进行Multipart Form Data的封装;
- 创建HttpWebRequest对象;
- 将请求头和请求内容添加到HttpWebRequest对象中;
- 发送请求并等待服务器响应。
下面是实现代码示例:
public string UploadFile(string url, byte[] fileData, string fieldName, string fileName)
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.KeepAlive = true;
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream postDataStream = new MemoryStream();
StreamWriter writer = new StreamWriter(postDataStream);
//写入上传文件的内容
writer.Write("\r\n");
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: image/jpeg\r\n\r\n";
string header = string.Format(headerTemplate, fieldName, fileName);
byte[] headerBytes = Encoding.UTF8.GetBytes(header);
postDataStream.Write(headerBytes, 0, headerBytes.Length);
postDataStream.Write(fileData, 0, fileData.Length);
//写入请求结束标志
postDataStream.Write(boundaryBytes, 0, boundaryBytes.Length);
writer.Flush();
postDataStream.Seek(0, SeekOrigin.Begin);
//写入请求头
request.ContentLength = postDataStream.Length;
Stream requestStream = request.GetRequestStream();
postDataStream.CopyTo(requestStream);
//接受返回数据
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = reader.ReadToEnd();
reader.Close();
response.Close();
requestStream.Close();
return result;
}
2. 使用HttpClient实现图片上传
使用HttpClient进行图片上传的流程如下:
- 创建HttpClient实例;
- 创建MultipartFormDataContent实例并将文件内容添加到其中;
- 创建HttpRequestMessage实例,将MultipartFormDataContent作为请求体添加到其中,并设置请求头;
- 发送请求并等待服务器响应。
下面是实现代码示例:
public async Task<string> UploadFileAsync(string url, byte[] fileData, string fieldName, string fileName)
{
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
var fileContent = new ByteArrayContent(fileData);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
content.Add(fileContent, fieldName, fileName);
using (var message = new HttpRequestMessage(HttpMethod.Post, url))
{
message.Headers.Add("User-Agent", "HttpClientFactory-Sample");
message.Content = content;
using (var response = await client.SendAsync(message))
{
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
}
}
}
总结
以上就是C# form-data上传图片流到远程服务器的完整攻略,其中主要是使用HttpWebRequest和HttpClient实现。需要注意的是,虽然使用HttpClient的代码看起来更简洁,但是性能可能不如HttpWebRequest,需要选择适合自己的上传方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# form-data上传图片流到远程服务器的详细代码 - Python技术站