首先在控制器中注入IWebHostEnvironment
IWebHostEnvironment提供有關正在運行應用程序的Web托管環境的信息。
屬於命名空間Microsoft.AspNetCore.Hosting
IWebHostEnvironment接口需要注入為控制器依賴性再后來整個控制器使用。
該IWebHostEnvironment接口有兩個屬性。
- WebRootPath -www文件夾的路徑(獲取或設置包含Web服務應用程序內容文件的目錄的絕對路徑)
- ContentRootPath -根文件夾路徑包含了所有應用程序文件(獲取或設置IFileProvider在WebRootPath指指點點。)
private readonly IWebHostEnvironment _webHostEnvironment; public CommonController(IWebHostEnvironment webHostEnvironment) { _webHostEnvironment = webHostEnvironment; }
此處根據WebRootPath = "D:\\source\\repos\\AnnualMeeting\\Game\\wwwroot",把文件放在wwwroot目錄下
文件上傳使用IFormFile
1 [Route("api/[controller]")] 2 [ApiController] 3 public class CommonController : ControllerBase 4 { 5 private readonly IWebHostEnvironment _webHostEnvironment; 6 7 public CommonController(IWebHostEnvironment webHostEnvironment) 8 { 9 _webHostEnvironment = webHostEnvironment; 10 } 11 [HttpPost] 12 [Route("FileUpload")] 13 public async Task<IActionResult> FileUpload(IFormFile files) 14 { 15 16 if (files == null && files.Length <= 0) 17 { 18 throw new Exception("Files is Null"); 19 } 20 21 var fileExt = Path.GetExtension(files.FileName); 22 var newFileName = Guid.NewGuid().ToString() + fileExt; 23 var path = Path.Combine(_webHostEnvironment.WebRootPath, "Avatar\\" + newFileName); 24 try 25 { 26 await using var stream = System.IO.File.Create(path); 27 await files.CopyToAsync(stream); 28 return Ok(new { msg = "上傳成功", fileName = newFileName }); 29 } 30 catch (Exception e) 31 { 32 throw new Exception(e.Message); 33 } 34 } 35 }
在swagger中可直接上傳測試