C# HttpWebRequest 上传文件
1 /// <summary> 2 /// 上传文件 3 /// </summary> 4 /// <param name="url"></param> 5 /// <param name="files"></param> 6 /// <param name="data"></param> 7 /// <param name="encoding"></param> 8 /// <returns></returns> 9 public static string HttpUploadFile(string url, string[] files, NameValueCollection data, Encoding encoding) 10 { 11 string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); 12 byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); 13 byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); 14 15 //1.HttpWebRequest 16 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 17 request.ContentType = "multipart/form-data; boundary=" + boundary; 18 request.Method = "POST"; 19 request.KeepAlive = true; 20 request.Credentials = CredentialCache.DefaultCredentials; 21 22 using (Stream stream = request.GetRequestStream()) 23 { 24 //1.1 key/value 25 string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; 26 if (data != null) 27 { 28 foreach (string key in data.Keys) 29 { 30 stream.Write(boundarybytes, 0, boundarybytes.Length); 31 string formitem = string.Format(formdataTemplate, key, data[key]); 32 byte[] formitembytes = encoding.GetBytes(formitem); 33 stream.Write(formitembytes, 0, formitembytes.Length); 34 } 35 } 36 37 //1.2 file 38 string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; 39 byte[] buffer = new byte[4096]; 40 int bytesRead = 0; 41 for (int i = 0; i < files.Length; i++) 42 { 43 stream.Write(boundarybytes, 0, boundarybytes.Length); 44 string header = string.Format(headerTemplate, "file" + i, Path.GetFileName(files[i])); 45 byte[] headerbytes = encoding.GetBytes(header); 46 stream.Write(headerbytes, 0, headerbytes.Length); 47 using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read)) 48 { 49 while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 50 { 51 stream.Write(buffer, 0, bytesRead); 52 } 53 } 54 } 55 56 //1.3 form end 57 stream.Write(endbytes, 0, endbytes.Length); 58 } 59 //2.WebResponse 60 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 61 using (StreamReader stream = new StreamReader(response.GetResponseStream())) 62 { 63 return stream.ReadToEnd(); 64 } 65 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)