博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 采用HttpWebRequest 自定义头信息 上传文件
阅读量:5107 次
发布时间:2019-06-13

本文共 2711 字,大约阅读时间需要 9 分钟。

刚实习的时候遇到一个问题:上传文件的URL有特定格式限制,需要按格式定义头信息,才能上传成功。查资料时候当时好像是java版本的,C#代码贴上。

//uploadFile:上传文件名    groupId:GUIDpublic string FileUpload(string uploadFile, string groupId){    //从流中读取字节块并将该数据写入给定缓冲区buffer中    FileStream fileStream = new FileStream(uploadFile, FileMode.Open, FileAccess.Read);    Byte[] buffer = new Byte[fileStream.Length];    fileStream.Read(buffer, 0, Convert.ToInt32(fileStream.Length));    //boundary setting     string boundary = "----------" + DateTime.Now.Ticks.ToString("x");    string fileName = Path.GetFileName(uploadFile);    string nameOnly = fileName.Substring(0, fileName.LastIndexOf("."));    Dictionary
Params = new Dictionary
(); Params.Add("name", fileName); Params.Add("groupId", groupId); Params.Add("appModule", "portal"); Params.Add("filePath", ""); Params.Add("thumbnail", "true"); Params.Add("storeType", "1"); Params.Add("property1", ""); Params.Add("property2", ""); Params.Add("property3", ""); Params.Add("property4", ""); Params.Add("property5", ""); Params.Add("flag", "false"); StringBuilder sb = new StringBuilder(); //发送必要字段 foreach (KeyValuePair
param in Params) { sb = sb.Append("--"); sb = sb.Append(boundary); sb = sb.Append("\r\n"); sb = sb.Append("Content-Disposition: form-data; name=\"" + param.Key + "\"\r\n\r\n"); sb = sb.Append(param.Value); sb = sb.Append("\r\n"); } //要发送的文件 sb = sb.Append("--"); sb = sb.Append(boundary); sb = sb.Append("\r\n"); sb = sb.Append("Content-Disposition: form-data; name=\"" + nameOnly + "\"; filename=\"" + fileName + "\"\r\n"); sb = sb.Append("Content-Type: application/octet-stream\r\n\r\n"); byte[] data = Encoding.Default.GetBytes(sb.ToString()); byte[] end_data = Encoding.Default.GetBytes(("\r\n--" + boundary + "--\r\n")); Uri uri = new Uri("上传文件地址"); HttpWebRequest webRequset = (HttpWebRequest)WebRequest.Create(uri); webRequset.ContentType = "multipart/form-data; boundary=" + boundary; webRequset.Method = "POST"; //长度属性:头+文件流+尾的长度 long length = data.Length + buffer.Length + end_data.Length; webRequset.ContentLength = length; Stream requestStream = webRequset.GetRequestStream(); //将拼接的数据和文件流写入 requestStream.Write(data, 0, data.Length); requestStream.Write(buffer, 0, buffer.Length); requestStream.Write(end_data, 0, end_data.Length); //获取返回信息 WebResponse responce = webRequset.GetResponse(); Stream responeStream = responce.GetResponseStream(); StreamReader sr = new StreamReader(responeStream); return sr.ReadToEnd();}

 

转载于:https://www.cnblogs.com/donnie-d-yuan/p/5148601.html

你可能感兴趣的文章
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
php_扑克类
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>