NetCore3.1 多文件上傳


十年河東,十年河西,莫欺少年窮

學無止境,精益求精

本篇博客主要用於個人記錄,同時也分享給大家

代碼如下:

        [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可以不要。結合業務進行取舍。

@天才卧龍的博客


免責聲明!

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



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