Web 发送 form-data 请求 Content-Type: multipart/form-data
生活随笔
收集整理的這篇文章主要介紹了
Web 发送 form-data 请求 Content-Type: multipart/form-data
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
項目場景:APP 端需要上傳圖片文件,并且需要攜帶一些相關的參數;
服務端使用 ASP.NET WebAPI,MultipartFormDataStreamProvider 接收參數,MultipartMemoryStreamProvider 接收文件
有文件上傳時使用 Content-Type: multipart/form-data 的類型請求
【注意:Headers 中千萬不要添加 Content-Type: application/json 否則接收不到參數】
postman 工具請求參數實例
Controller接收參數
[HttpPost] public async Task<CreateStudentLeaveResponse> Create() {string gradeId = HttpContext.Current.Request["GradeId"];string classId = HttpContext.Current.Request["ClassId"];string studentId = HttpContext.Current.Request["StudentId"];if (!Request.Content.IsMimeMultipartContent())throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);string root = HttpContext.Current.Server.MapPath(StringPlus.GetWebConfigKey("APIClassBannerPath"));var providerForm = new MultipartFormDataStreamProvider(root);await Request.Content.ReadAsMultipartAsync(providerForm);Dictionary<string, string> dic = new Dictionary<string, string>();foreach (var key in providerForm.FormData.AllKeys){//接收FormData dic.Add(key, providerForm.FormData[key]);}var jsonString = JsonConvert.SerializeObject(dic, Formatting.Indented);StudentLeaveRequest studentLeaveModel = JsonConvert.DeserializeObject<StudentLeaveRequest>(jsonString);var provider = new MultipartMemoryStreamProvider();foreach (var file in provider.Contents){if (!string.IsNullOrEmpty(file.Headers.ContentDisposition.FileName)){UpfileDto upfile = new UpfileDto();FileInfo fileinfo = new FileInfo(file.Headers.ContentDisposition.FileName.Replace("\"", ""));string filename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');//string filename = file.Headers.ContentDisposition.Name.Replace("\"", "");string fileExtension = Path.GetExtension(filename).ToLower();//文件的后綴名(小寫)filename = $"{DateTime.Now.ToString("yyyyMMddHHmmss.fff")}{fileExtension}";if (string.IsNullOrEmpty(filename))filename = $"{DateTime.Now.ToString("yyyyMMddHHmmss.fff")}{fileExtension}";var ms = file.ReadAsStreamAsync().Result;using (var br = new BinaryReader(ms)){System.Drawing.Image oImage = System.Drawing.Image.FromStream(ms);oImage.Save(upfile.OFullName, System.Drawing.Imaging.ImageFormat.Jpeg);}} }===============================
[HttpPost]public async Task<CreateStudentLeaveResponse> Create(){List<AttachmentDto> list = new List<AttachmentDto>();try{//if (!Request.Content.IsMimeMultipartContent())// throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 234");string root = HttpContext.Current.Server.MapPath(StringPlus.GetWebConfigKey("APIStudentLeavePath"));#region StudentLeave 操作string posterType = HttpContext.Current.Request["PosterType"];string leaveType = HttpContext.Current.Request["LeaveType"];string locationType = HttpContext.Current.Request["LocationType"];string gradeId = HttpContext.Current.Request["GradeId"];string classId = HttpContext.Current.Request["ClassId"];string teacherId = HttpContext.Current.Request["TeacherId"];string studentParentId = HttpContext.Current.Request["StudentParentId"];string studentId = HttpContext.Current.Request["StudentId"];string subject = HttpContext.Current.Request["Subject"];string content = HttpContext.Current.Request["Content"];string startTime = HttpContext.Current.Request["StartTime"];string endTime = HttpContext.Current.Request["EndTime"];string reason = HttpContext.Current.Request["Reason"];logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 251");StudentLeaveRequest request = new StudentLeaveRequest();request.Id = StringPlus.GenerateGuid();request.PosterType = Convert.ToInt32(posterType);request.LeaveType = leaveType;request.LocationType = Convert.ToInt32(locationType);request.GradeId = gradeId;request.ClassId = classId;request.TeacherId = teacherId;request.StudentParentId = studentParentId;request.StudentId = studentId;request.Subject = subject;request.Content = content;request.SchoolId = schoolId;request.StartTime = Convert.ToDateTime(startTime);request.EndTime = Convert.ToDateTime(endTime);request.Reason = reason;request.Approver = string.Empty;request.ApprovalStatus = (int)EnumApprovalStatus.UnderApproval;//request.CreatedBy = string.Empty;//request.ModifyBy = string.Empty;logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 272");if (!_relationRepo.IsExistRelation(studentId, studentParentId, schoolId)){return ReturnResult((int)CodeEnum.Fail, "學生與家長未建立親屬關系,不能申請請假");}logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 277");_studentLeaveRepo.Add(Mapper.Map<StudentLeaveDo>(request));#endregionlogger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 281");#region 發送通知var student = _userInfoRepo.FindFirst(x => x.Id == studentId && x.Status != "D");logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 284");string studentName = "";if (student != null){studentName = student.RealName;}string strlocationType = "";switch (request.LocationType){case 1:strlocationType = "校內";break;case 2:strlocationType = "校外";break;case 3:strlocationType = "宿舍外";break;}string strLeaveType = "";switch (request.LeaveType){case "2":strLeaveType = "事假";break;case "3":strLeaveType = "病假";break;}//var parent = _userInfoRepo.FindFirst(x => x.Id == studentParentId && x.Status != "D");//string parentMobile = "";//if (parent != null)//{// parentMobile = parent.Mobile;//}var teacher = _userInfoRepo.FindFirst(x => x.Id == teacherId && x.Status != "D");string teacherMobile = "";if (teacher != null){teacherMobile = teacher.Mobile;}if (!string.IsNullOrEmpty(teacherMobile)){string extParams = "{ \"LeaveId\":" + "\"" + request.Id + "\"}";AliPushUtil.AccessKeyId = _accessKeyId;AliPushUtil.AccessKeySecret = _accessKeySecret;AliPushUtil.AndroidAppKey = _androidAppKey;AliPushUtil.IOSAppKey = _iOSAppKey;AliPushUtil.TargetValue = teacherMobile;AliPushUtil.Initial();string strBody = $"{studentName}{strlocationType}{strLeaveType} {startTime}至{endTime}";AliPushUtil.Push("ALIAS", "NOTICE", "您有一個新的請假通知", strBody, extParams, "DEV", "", "NONE", "", "");}#endregionlogger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 342");#region 上傳圖片logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 344");if (Request.Content.IsMimeMultipartContent()){var provider = new MultipartMemoryStreamProvider();StringBuilder sb = new StringBuilder();await Request.Content.ReadAsMultipartAsync(provider);int fileTotal = 0;foreach (var file in provider.Contents){if (file.Headers.ContentType != null&& (file.Headers.ContentType.MediaType == "image/jpeg"|| file.Headers.ContentType.MediaType == "image/png"|| file.Headers.ContentType.MediaType == "image/bmp"|| file.Headers.ContentType.MediaType == "image/gif")){fileTotal += 1;}}if (fileTotal < 10){}else{return ReturnResult(-302, "超過允許的圖片數量范圍");}logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 371");foreach (var file in provider.Contents){if (!string.IsNullOrEmpty(file.Headers.ContentDisposition.FileName)){UpfileDto upfile = new UpfileDto();FileInfo fileinfo = new FileInfo(file.Headers.ContentDisposition.FileName.Replace("\"", ""));string filename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');//string filename = file.Headers.ContentDisposition.Name.Replace("\"", "");string fileExtension = Path.GetExtension(filename).ToLower();//文件的后綴名(小寫)filename = $"{DateTime.Now.ToString("yyyyMMddHHmmss.fff")}{fileExtension}";if (string.IsNullOrEmpty(filename))filename = $"{DateTime.Now.ToString("yyyyMMddHHmmss.fff")}{fileExtension}";var ms = file.ReadAsStreamAsync().Result;using (var br = new BinaryReader(ms)){if (ms.Length <= 0 || ms.Length >= 3000000){return ReturnResult(0, "指定的文件大小不符合要求!");}#region 生成原圖(不保存)System.Drawing.Image oImage = System.Drawing.Image.FromStream(ms);int owidth = oImage.Width; //原圖寬度int oheight = oImage.Height; //原圖高度int LimitWidth = 3072;int LimitHeight = 2304;int twidth = 300;int theight = 300;string OFileName = "0";string TFileName = "0";if (owidth > LimitWidth || oheight > LimitHeight)return ReturnResult(0, "超過允許的圖片尺寸范圍!");if (owidth >= twidth || oheight >= theight){//按比例計算出縮略圖的寬度和高度if (owidth >= oheight)theight = (int)Math.Floor(Convert.ToDouble(oheight) * (Convert.ToDouble(twidth) / Convert.ToDouble(owidth)));//等比設定高度elsetwidth = (int)Math.Floor(Convert.ToDouble(owidth) * (Convert.ToDouble(theight) / Convert.ToDouble(oheight)));//等比設定寬度}else{theight = oheight;twidth = owidth;}var data = br.ReadBytes((int)ms.Length);#endregionOFileName = "o" + filename;TFileName = "t" + filename;string SavePath = HttpContext.Current.Server.MapPath(StringPlus.GetWebConfigKey("APIStudentLeavePath"));upfile.OFullName = SavePath + OFileName;upfile.TFullName = SavePath + TFileName;#region 保存圖片switch (fileExtension){case ".jpeg":case ".jpg":{oImage.Save(upfile.OFullName, System.Drawing.Imaging.ImageFormat.Jpeg);break;}case ".gif":{oImage.Save(upfile.OFullName, System.Drawing.Imaging.ImageFormat.Gif);break;}case ".png":{oImage.Save(upfile.OFullName, System.Drawing.Imaging.ImageFormat.Png);break;}case ".bmp":{oImage.Save(upfile.OFullName, System.Drawing.Imaging.ImageFormat.Bmp);break;}}list.Add(new AttachmentDto{Id = Guid.NewGuid().ToString(),AttType = (int)EnumAttachmentType.StudentLeave,AttNo = request.Id,FileType = (int)EnumFileType.Image,FileName = OFileName,Path = $"{StringPlus.GetWebConfigKey("APIStudentLeavePath")}{OFileName}",SchoolId = schoolId,Status = "A"});#endregion}logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 475");}}}#endregion}catch (Exception ex){logger.Error("StudentLeaveController CreateStudentLeaveResponse Ln 482" + ex.Message);return ReturnResult(500, "服務器無響應" + ex.Message);}logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 488");_attachmentRepo.BatchInsert(Mapper.Map<List<AttachmentDo>>(list));logger.Info("StudentLeaveController CreateStudentLeaveResponse Ln 490");return new CreateStudentLeaveResponse { };}3、
4、
5、
6、
7、
8、
9、
0、
總結
以上是生活随笔為你收集整理的Web 发送 form-data 请求 Content-Type: multipart/form-data的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每天学习一点新知识】robots.tx
- 下一篇: 开票软件自动开票处理