測試時可以直接使用PostMan模擬發送請求
/// <summary> /// 手機端上傳頭像接口 /// </summary> /// <param name="LoginToken"></param> /// <param name="Base64String"></param> /// <returns></returns> [HttpPost] public async Task<HttpResponseMessage> UploadAvatar() { // 檢查是否是 multipart/form-data if (!Request.Content.IsMimeMultipartContent("form-data")) return CreateResponse(false, "請選擇要上傳的文件!"); // 設置上傳目錄 string root = System.Web.HttpContext.Current.Server.MapPath("/upload/avatars/"); var provider = new ReNameMultipartFormDataStreamProvider(root); string LoginToken = System.Web.HttpContext.Current.Request.Params["LoginToken"]; var token = new Guid(LoginToken); var loginInfo = this.MobileService.GetLoginInfo(token); if (loginInfo == null) { return CreateResponse(false, "登錄授權失敗!"); } await Request.Content.ReadAsMultipartAsync(provider); var file = provider.FileData[0]; var fileInfo = new FileInfo(file.LocalFileName); var fileStream = fileInfo.OpenRead(); var img = System.Drawing.Image.FromStream(fileStream); UploadAvatar upload = new UploadAvatar(); var result = upload.MobileUploadImage(img); //刪除中間文件 //解除占用TODO //if (File.Exists(file.LocalFileName)) //{ // File.Delete(file.LocalFileName); //} if (result.success) { var person = this.FoundationService.GetPersonInfoById(loginInfo.UserID); if (person != null) { person.Photo = result.sourceUrl;//頭像縮略圖地址 this.FoundationService.UpdatePersonInfo(person); result.sourceUrl = "http://192.168.3.66:8008" + result.sourceUrl; } } return CreateResponse(true, result); }
public Result MobileUploadImage(Image _file) { bool isThumbnail = true; try { string fileExt = "jpg"; //文件擴展名,不含“.” path = HttpContext.Current.Server.MapPath("/upload/avatars/");//上傳頭像路徑 string newFileName = GetRamCode() + "." + fileExt; //隨機生成新的文件名 string newThumbnailFileName = "thumb_" + newFileName; //隨機生成縮略圖文件名 string upLoadPath = "/upload/avatars/yt/" + newFileName;//上傳原圖目錄相對路徑 string upLoadPathS = "/upload/avatars/slt/" + newFileName;//上傳縮略圖目錄相對路徑 //是否存在存放縮略圖和原圖的文件夾 沒有則創建 string pathS = HttpContext.Current.Server.MapPath("/upload/avatars/slt/"); string pathY = HttpContext.Current.Server.MapPath("/upload/avatars/yt/"); if (!Directory.Exists(pathS)) { Directory.CreateDirectory(pathS); } if (!Directory.Exists(pathY)) { Directory.CreateDirectory(pathY); } string newFilePath = path + "yt\\" + newFileName; //上傳后原圖的路徑 string newThumbnailPath = path + "slt\\" + newFileName; //上傳后的縮略圖路徑 #region 檢查上傳的物理路徑是否存在,不存在則創建 if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } #endregion #region 保存文件 _file.Save(newFilePath); #endregion #region 圖片剪裁 //如果是圖片,檢查是否需要生成縮略圖,是則生成 if (IsImage(fileExt) && isThumbnail && thumbnailwidth > 0 && thumbnailheight > 0) { Thumbnail.MakeThumbnailImage(newFilePath, newThumbnailPath, thumbnailwidth, thumbnailheight, "Cut"); } else { newThumbnailPath = newFilePath; //不生成縮略圖則返回原圖 } #endregion //處理完畢,返回JOSN格式的文件信息 return new Result() { success = true, msg = "操作成功!", sourceUrl = upLoadPathS }; } catch { return new Result() { success = false, msg = "上傳過程中發生意外錯誤!" }; } }
使用PostMan模擬測試時要注意的地方:
Body中請求類型選擇 form-data 選擇文件的參數key是 MultipartFile
下圖中Headers中的不要勾選