WebAPI實現移動端上傳頭像接口


測試時可以直接使用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中的不要勾選

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM