C#.NET使用multipart/form-data方式上传文件及参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | public static string UploadPeopleFaceRequest(AddVisitorRequestDto addVisitorRequestDto) { try { string url = _faceIp + "/fastgate/visitor" ; Dictionary< string , object > parameters = new Dictionary< string , object >(); parameters.Add( "PeoName" , addVisitorRequestDto.PeoName); parameters.Add( "PeoSex" , addVisitorRequestDto.PeoSex); parameters.Add( "PeoCardType" , addVisitorRequestDto.PeoCardType); parameters.Add( "PeoCardNum" , addVisitorRequestDto.PeoCardNum); parameters.Add( "PeoTelephone" , addVisitorRequestDto.PeoTelephone); parameters.Add( "file" , addVisitorRequestDto.file); parameters.Add( "PeoStartTime" , addVisitorRequestDto.PeoStartTime); parameters.Add( "PeoEndTime" , addVisitorRequestDto.PeoEndTime); parameters.Add( "AddImagesUrl" , addVisitorRequestDto.AddImagesUrl); parameters.Add( "PeoPersonName" , addVisitorRequestDto.PeoPersonName); parameters.Add( "PersonPhone" , addVisitorRequestDto.PersonPhone); //parameters.Add("Qrcode", addVisitorRequestDto.Qrcode); string boundary = "---------------------------" + DateTime.Now.Ticks.ToString( "x" ); byte [] boundaryBytes = System.Text.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 ; var curCookie = GetToken(); //获取cookie request.Headers.Add( "cookie" , curCookie); //request.Credentials = System.Net.CredentialCache.DefaultCredentials; if (parameters != null && parameters.Count > 0) { using (Stream requestStream = request.GetRequestStream()) { foreach (KeyValuePair< string , object > pair in parameters) { requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); if (pair.Value is AddVisitorRequestDto.FormFile) //如果是文件的格式 { AddVisitorRequestDto.FormFile file = pair.Value as AddVisitorRequestDto.FormFile; string header = "Content-Disposition: form-data; name=\"" + pair.Key + "\"; filename=\"" + file.Name + "\"\r\nContent-Type: " + file.ContentType + "\r\n\r\n" ; byte [] bytes = System.Text.Encoding.UTF8.GetBytes(header); requestStream.Write(bytes, 0, bytes.Length); byte [] buffer = new byte [32768]; int bytesRead; if (file.Stream == null ) { // upload from file using (FileStream fileStream = File.OpenRead(HttpContext.Current.Server.MapPath(file.FilePath))) { while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) requestStream.Write(buffer, 0, bytesRead); fileStream.Close(); } } else { // upload from given stream while ((bytesRead = file.Stream.Read(buffer, 0, buffer.Length)) != 0) requestStream.Write(buffer, 0, bytesRead); } } else { string data = "Content-Disposition: form-data; name=\"" + pair.Key + "\"\r\n\r\n" + pair.Value; byte [] bytes = System.Text.Encoding.UTF8.GetBytes(data); requestStream.Write(bytes, 0, bytes.Length); } } byte [] trailer = System.Text.Encoding.ASCII.GetBytes( "\r\n--" + boundary + "--\r\n" ); requestStream.Write(trailer, 0, trailer.Length); requestStream.Close(); } } using (WebResponse response = request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { var returnRes = reader.ReadToEnd(); BaseHelper.WriteLogs( "门禁人脸上传返回" , returnRes); return returnRes; } } } } catch (Exception ex) { BaseHelper.WriteLogs( "门禁人脸上传返回" , ex.Message); } return null ; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)