十年河東,十年河西,莫欺少年窮
學無止境,精益求精
本篇博客主要用於個人記錄,同時也分享給大家
代碼如下:
[HttpPost] [Route("UploadFile")] public IActionResult UploadFile([FromForm] IFormFileCollection formFiles, string FileCate) { var result = _Service.UploadFile(formFiles, FileCate); return Ok(result); }
主代碼
/// <summary> /// 上傳圖片 /// </summary> /// <param name="formFile"></param> /// <param name="path">路勁</param> /// <returns></returns> public BaseResponse UploadFile(IFormFileCollection formFiles, string FileCate) { try { List<UploadDocumentModel> fileLst = new List<UploadDocumentModel>(); if (formFiles.Count == 0) { return CommonBaseResponse.SetResponse<List<UploadDocumentModel>>(null, false, "請選擇要上傳的文件。"); } var chekResult = CheckFile(formFiles); if (!chekResult.IsSuccess) { return chekResult; } foreach (var file in formFiles) { var suffix = Path.GetExtension(file.FileName);//提取上傳的文件文件后綴 var newFileName = Guid.NewGuid().ToString() + suffix; var path = this._pictureOptions.BaseUrl + @"\" + newFileName; var XdPath = this._pictureOptions.BasePath + @"\" + newFileName; var fileSize = file.Length; var fileModel = new UploadDocumentModel() { fileName = newFileName, fileSize = fileSize, suffix = suffix, path = path, fileCate = FileCate, XdPath = XdPath }; fileLst.Add(fileModel); if (!System.IO.Directory.Exists(this._pictureOptions.BaseUrl)) { System.IO.Directory.CreateDirectory(this._pictureOptions.BaseUrl); } using (var fs = System.IO.File.Create(path)) { file.CopyTo(fs); //Stream 都有 Flush() 方法, //根據官方文檔的說法 //“使用此方法將所有信息從基礎緩沖區移動到其目標或清除緩沖區,或者同時執行這兩種操作” fs.Flush(); } } return CommonBaseResponse.SetResponse<List<UploadDocumentModel>>(fileLst, true); } catch (Exception ex) { throw ExceptionHelper.GetAggregateException("SysDocumentService.UploadFile", "UploadFile", FileCate, ex); } } /// <summary> /// 檢測文件 /// </summary> /// <param name="formFiles"></param> /// <returns></returns> private BaseResponse CheckFile(IFormFileCollection formFiles) { foreach (var file in formFiles) { var fileNameWithoutSuffix = Path.GetFileNameWithoutExtension(file.FileName);//文件名 不包含后綴 var suffix = Path.GetExtension(file.FileName);//提取上傳的文件文件后綴 var fileSize = file.Length; if (fileSize >= this._pictureOptions.MaxSize) { return CommonBaseResponse.SetResponse(false, "存在過大的文件。"); } if (!this._pictureOptions.FileTypes.Contains(suffix))//檢查文件格式 { return CommonBaseResponse.SetResponse(false, "存在非法擴展名文件。"); } } return CommonBaseResponse.SetResponse(true); }
相關參數,采用NEtCore的選項模式。Uploads 為IIS的虛擬目錄。
"FileOptions": { "FileTypes": ".gif,.jpg,.jpeg,.png,.bmp,.GIF,.JPG,.JPEG,.PNG,.BMP", "MaxSize": 10485760, "BaseUrl": "D:\\dotnet\\fileServer\\WuanManagerFiles", "BasePath": "Uploads" }
注:FileCate可以不要。結合業務進行取舍。
@天才卧龍的博客