[Unity开发字典]HTTP_C#_上传文件
·
文章目录
概要
本文简单展示http上传的格式规则
上传文件数据前的头部信息
上传的数据必须按照格式写入流中
- –边界字符串
- Content-Disposition: form-data; name="字段名字,之后写入的文件2进制数据和该字段名对应";filename=“传到服务器上使用的文件名”
- Content-Type:application/octet-stream(这里示例传2进制文件 所以这里使用2进制)
- 空一行
- 直接写入传入的内容
- –边界字符串–
示例代码
//1.创建HttpWebRequest对象
HttpWebRequest req = HttpWebRequest.Create("http://192.168.50.109:8000/Http_Server/") as HttpWebRequest;
//2.相关设置(请求类型,内容类型,超时,身份验证等)
req.Method = WebRequestMethods.Http.Post;
req.ContentType = "multipart/form-data;boundary=Shihe";
req.Timeout = 500000;
req.Credentials = new NetworkCredential("Shihe", "123123");
req.PreAuthenticate = true;//先验证身份 再上传数据
//.按格式拼接字符串并且转为字节数组之后用于上传
//1.文件数据前的头部信息
// --边界字符串
// Content-Disposition: form-data; name="字段名字,之后写入的文件2进制数据和该字段名对应";filename="传到服务器上使用的文件名"
// Content-Type:application/octet-stream(由于我们传2进制文件 所以这里使用2进制)
// 空一行
string head = "--Shihe\r\n" +
"Content-Disposition:form-data;name=\"file\";filename=\"http上传的文件.jpg\"\r\n" +
"Content-Type:application/octet-stream\r\n\r\n";
//头部拼接字符串规则信息的字节数组
byte[] headBytes = Encoding.UTF8.GetBytes(head);
//2.结束的边界信息
// --边界字符串--
byte[] endBytes = Encoding.UTF8.GetBytes("\r\n--Shihe--\r\n");
//4.写入上传流
using (FileStream localFileStream = File.OpenRead(Application.streamingAssetsPath + "/test.png"))
{
//1.设置上传长度
//总长度 是前部分字符串 + 文件本身有多大 + 后部分边界字符串
req.ContentLength = headBytes.Length + localFileStream.Length + endBytes.Length;
//用于上传的流
Stream upLoadStream = req.GetRequestStream();
//4-2.先写入前部分头部信息
upLoadStream.Write(headBytes, 0, headBytes.Length);
//4-3.再写入文件数据
byte[] bytes = new byte[2048];
int contentLength = localFileStream.Read(bytes, 0, bytes.Length);
while (contentLength != 0)
{
upLoadStream.Write(bytes, 0, contentLength);
contentLength = localFileStream.Read(bytes, 0, bytes.Length);
}
//4-4.在写入结束的边界信息
upLoadStream.Write(endBytes, 0, endBytes.Length);
upLoadStream.Close();
localFileStream.Close();
}
//5.上传数据,获取响应
HttpWebResponse res = req.GetResponse() as HttpWebResponse;
if (res.StatusCode == HttpStatusCode.OK)
print("上传通信成功");
else
print("上传失败" + res.StatusCode);
小结
HTTP上传文件相对比较麻烦
需要按照指定的规则进行内容拼接达到上传文件的目的
其中相对重要的知识点是
上传文件时的规则
–边界字符串
Content - Disposition: form - data; name = “file”; filename = “传到服务器上使用的文件名”
Content - Type:application / octet - stream(由于我们传2进制文件 所以这里使用2进制)
空行
(这里直接写入传入的内容)
–边界字符串–
关于其更多的规则,可以前往官网查看详细说明
关于ContentType更多内容可以前往
关于媒体类型可以前往
关于Content - Disposition更多内容可以前往
更多推荐

所有评论(0)