C# 采用HttpWebRequest 自定义头信息 上传文件
2016-01-21 16:02
639 查看
刚实习的时候遇到一个问题:上传文件的URL有特定格式限制,需要按格式定义头信息,才能上传成功。查资料时候当时好像是java版本的,C#代码贴上。
//uploadFile:上传文件名 groupId:GUID public 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<string, string> Params = new Dictionary<string, string>(); 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<string, string> 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(); }
相关文章推荐
- 添加删除元素(来自网络)
- 根据网络状态判断是否打开程序
- Android 5.0无法使用HttpClient
- Android的三种网络通信方式
- Unreal Engine4学习笔记--2制作别人可以加入的多人游戏
- 网络7层协议简单总结
- 网络编程01
- Tomcat的https配置及双接口配置
- Linux网络流量实时监控工具-ifstat
- VirtualBox虚拟机快速入门(5):使用技巧【网络配置】
- Atitit.得到网络邻居列表java php c#.net python
- Atitit.得到网络邻居列表java php c#.net python
- Atitit.得到网络邻居列表java php c#.net python
- java apache commons HttpClient发送get和post请求的学习整理
- HttpClient使用详解
- DELPHI 调用淘宝API 例子 IdHTTP1 控件
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 网络编程基本知识
- http 协议
- okhttp使用总结