.net core webapi 大文件上傳到wwwroot文件夾的操作代碼
1.配置staticfiles(program文件中)
app.UseStaticFiles();
2.在wwwroot下創(chuàng)建upload文件夾
3.返回結(jié)果封裝
namespace webapi; /// <summary> /// 統(tǒng)一數(shù)據(jù)響應(yīng)格式 /// </summary> public class Results<T> { /// <summary> /// 自定義的響應(yīng)碼,可以和http響應(yīng)碼一致,也可以不一致 /// </summary> public int Code { get; set; } /// <summary> /// 中文消息提示 /// </summary> public string? Msg { get; set; } /// <summary> /// 是否成功 /// </summary> public bool Success { get; set; } /// <summary> /// 響應(yīng)的數(shù)據(jù) /// </summary> public T? Data { get; set; } /// <summary> /// 返回的Token: 如果有值,則前端需要此這個(gè)值替舊的token值 /// </summary> public string? Token { get; set; } /// <summary> /// 設(shè)置數(shù)據(jù)的結(jié)果 /// </summary> /// <param name="data">數(shù)據(jù)</param> /// <returns></returns> public static Results<T> DataResult(T data) { return new Results<T> { Code = 1, Data = data, Msg = "請求成功", Success = true }; } /// <summary> /// 響應(yīng)成功的結(jié)果 /// </summary> /// <param name="msg"></param> /// <returns></returns> public static Results<T> SuccessResult(string msg = "操作成功") { return new Results<T> { Code = 1, Data = default, Msg = msg, Success = true }; } /// <summary> /// 響應(yīng)失敗的結(jié)果 /// </summary> /// <param name="msg"></param> /// <returns></returns> public static Results<T> FailResult(string msg = "請求失敗") { return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false }; } /// <summary> /// 參數(shù)有誤 /// </summary> /// <param name="msg"></param> /// <returns></returns> public static Results<T> InValidParameter(string msg = "參數(shù)有誤") { return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false }; } /// <summary> /// 獲取結(jié)果 /// </summary> /// <param name="code"></param> /// <param name="msg"></param> /// <param name="data"></param> /// <param name="success"></param> /// <returns></returns> public static Results<T> GetResult(int code = 0, string? msg = null, T? data = default, bool success = true) { return new Results<T> { Code = code, Data = data, Msg = msg, Success = success }; } /// <summary> /// 設(shè)置token結(jié)果 /// </summary> /// <param name="token"></param> /// <returns></returns> public static Results<T> TokenResult(string token) { return new Results<T> { Code = 1, Data = default, Msg = "請求成功", Success = true, Token = token }; } }
4.創(chuàng)建一個(gè)新的控制器
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Net.Http.Headers; namespace webapi.Controllers; /// <summary> /// 文件上傳 /// </summary> [ApiController] [Route("[controller]/[action]")] public class UploadController : ControllerBase { private readonly IWebHostEnvironment _hostEnvironment; /// <summary> /// 注入服務(wù) /// </summary> /// <param name="hostEnvironment"></param> public UploadController(IWebHostEnvironment hostEnvironment) { _hostEnvironment = hostEnvironment; } /// <summary> /// 上傳文件(支持多文件/大文件500M) /// </summary> /// <returns></returns> [HttpPost] [RequestFormLimits(MultipartBodyLengthLimit = 609715200)] [RequestSizeLimit(609715200)] public async Task<Results<List<string>>> UploadFile() { var request = HttpContext.Request; if (!request.HasFormContentType || !MediaTypeHeaderValue.TryParse(request.ContentType, out var mediaTypeHeader) || string.IsNullOrEmpty(mediaTypeHeader.Boundary.Value)) { return Results<List<string>>.FailResult("文件類型不支持"); } var reader = new MultipartReader(mediaTypeHeader.Boundary.Value, request.Body); var section = await reader.ReadNextSectionAsync(); List<string> serverFilePathList = new(); while (section != null) { var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition); if (hasContentDispositionHeader && contentDisposition!.DispositionType.Equals("form-data") && !string.IsNullOrEmpty(contentDisposition.FileName.Value)) { // 獲取文件后綴名 var extension = Path.GetExtension(contentDisposition.FileName.Value); // 為文件重命名,防止文件重名 var fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + extension; // 文件保存的文件夾路徑 var uploadPath = Path.Combine(_hostEnvironment.WebRootPath, "upload"); if (!Directory.Exists(uploadPath)) { Directory.CreateDirectory(uploadPath); } var fileFullPath = Path.Combine(uploadPath, fileName); try { using var targetStream = System.IO.File.Create(fileFullPath); await section.Body.CopyToAsync(targetStream); serverFilePathList.Add("/upload/" + fileName); } catch (Exception e) { Console.WriteLine(e); } } section = await reader.ReadNextSectionAsync(); } return Results<List<string>>.DataResult(serverFilePathList); } }
5.使用postman工具測試
6.查看本地上傳文件
到此這篇關(guān)于.net core webapi 大文件上傳到wwwroot文件夾的文章就介紹到這了,更多相關(guān).net core webapi 大文件上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解ASP.NET Core WebApi 返回統(tǒng)一格式參數(shù)
這篇文章主要介紹了詳解ASP.NET Core WebApi 返回統(tǒng)一格式參數(shù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11通過HttpClient 調(diào)用ASP.NET Web API示例
本篇文章主要介紹了通過HttpClient 調(diào)用ASP.NET Web API示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03淺談.NET反射機(jī)制的性能優(yōu)化 附實(shí)例下載
在進(jìn)入解釋型模版引擎的探討之前,我決定先分享一下這篇博客。因?yàn)樵诮忉屝鸵胬飳敕瓷涞母拍顏韺?shí)現(xiàn)更多、更復(fù)雜的功能2012-04-04IdentityServer4 QuckStart 授權(quán)與自定義Claims的問題
這篇文章主要介紹了IdentityServer4 QuckStart 授權(quán)與自定義Claims的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04ASP.NET 在下載文件時(shí)對其重命名的思路及實(shí)現(xiàn)方法
ASP.NET 在下載文件時(shí)對其重命名的思路及實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-06-06點(diǎn)擊提交按鈕后DropDownList的值變?yōu)槟J(rèn)值實(shí)現(xiàn)分析
在點(diǎn)擊提交按鈕后,頁面上所有的綁定到數(shù)據(jù)庫的控件值都恢復(fù)到默認(rèn)值,下面與大家分享下DropDownList的值變?yōu)槟J(rèn)值2013-05-05