当前位置: 首页 > news >正文

.net core webapi 大文件上传到wwwroot文件夹

1.配置staticfiles(program文件中)

 app.UseStaticFiles();

2.在wwwroot下创建upload文件夹
3.返回结果封装

namespace webapi;/// <summary>
/// 统一数据响应格式
/// </summary>
public class Results<T>
{/// <summary>/// 自定义的响应码,可以和http响应码一致,也可以不一致/// </summary>public int Code { get; set; }/// <summary>/// 中文消息提示/// </summary>public string? Msg { get; set; }/// <summary>/// 是否成功/// </summary>public bool Success { get; set; }/// <summary>/// 响应的数据/// </summary>public T? Data { get; set; }/// <summary>/// 返回的Token: 如果有值,则前端需要此这个值替旧的token值/// </summary>public string? Token { get; set; }/// <summary>/// 设置数据的结果/// </summary>/// <param name="data">数据</param>/// <returns></returns>public static Results<T> DataResult(T data){return new Results<T> { Code = 1, Data = data, Msg = "请求成功", Success = true };}/// <summary>/// 响应成功的结果/// </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>/// 响应失败的结果/// </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>/// 参数有误/// </summary>/// <param name="msg"></param>/// <returns></returns>public static Results<T> InValidParameter(string msg = "参数有误"){return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false };}/// <summary>/// 获取结果/// </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>/// 设置token结果/// </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.创建一个新的控制器

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>/// 注入服务/// </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.查看本地上传文件
在这里插入图片描述

http://www.lryc.cn/news/265340.html

相关文章:

  • C++设计模式 #3策略模式(Strategy Method)
  • 金融知识——OMS、EMS和PMS分别是什么意思
  • Docker——微服务的部署
  • AI时代架构设计新模式
  • 速盾网络:高防IP的好处
  • 创建Maven Web工程
  • 【PHP入门】2.2 流程控制
  • springCould中的zookeeper-从小白开始【3】
  • Node.js-模块化(二)
  • MAC 安装nginx
  • 开源 AI 新秀崛起:Bittensor 更像是真正的“OpenAI”
  • 设计模式:循序渐进走入工厂模式
  • 如何将图片(matlab、python)无损放入word论文
  • 在Next.js和React中搭建Cesium项目
  • docker学习(十、搭建redis集群,三主三从)
  • ES排错命令
  • 爬虫实战案例 -- 爬取豆瓣读书网页内容
  • 某电子文档安全管理系统 SQL注入漏洞复现
  • ant-design-vue Message 用法以及内容为 html片段情况
  • 2024 Move 开发者大会火热报名中!1 月 13 至 14 日上海见
  • hbase用shell命令新建表报错ERROR: KeeperErrorCode = NoNode for /hbase/master
  • PyQt中的冒号(:)
  • yolo-nas无人机高空红外热数据小目标检测(教程+代码)
  • Ubuntu22.04安装python2
  • 【Amazon 实验①】Amazon WAF功能增强之实验环境准备
  • Qt不能在线程函数操作UI
  • web网页端使用webSocket实现语音通话功能(SpringBoot+VUE)
  • 读取spring boot项目resource目录下的文件
  • R语言生物群落(生态)数据统计分析与绘图实践技术
  • c# OpenCV 检测(斑点检测、边缘检测、轮廓检测)(五)