.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.查看本地上传文件
相关文章:
.net core webapi 大文件上传到wwwroot文件夹
1.配置staticfiles(program文件中) app.UseStaticFiles();2.在wwwroot下创建upload文件夹 3.返回结果封装 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码ÿ…...
C++设计模式 #3策略模式(Strategy Method)
动机 在软件构建过程中,某些对象使用的的算法可能多种多样,经常改变。如果将这些算法都写在类中,会使得类变得异常复杂;而且有时候支持不频繁使用的算法也是性能负担。 如何在运行时根据需求透明地更改对象的算法?将…...
金融知识——OMS、EMS和PMS分别是什么意思
金融知识——OMS、EMS和PMS分别是什么意思 OMSEMSPMS OMS OMS(Order Management System)是为了管理头寸,以多种方式创建订单,并进行订单屈从检验以使得用户在订单创建时收到一些约束。在交易管理方面,OMS提供交易组合…...
Docker——微服务的部署
Docker——微服务的部署 文章目录 Docker——微服务的部署初识DockerDocker与虚拟机Docker架构安装DockerCentOS安装Docker卸载(可选)安装docker启动docker配置镜像加速 Docker的基本操作Docker的基本操作——镜像Docker基本操作——容器Docker基本操作—…...
AI时代架构设计新模式
云原生架构原则 云原生架构本身作为一种架构,也有若干架构原则作为应用架构的核心架构控制面,通过遵从这些架构原则可以让技术主管和架构师在做技术选择时不会出现大的偏差。 服务化原则 当代码规模超出小团队的合作范围时,就有必要进行服务…...
速盾网络:高防IP的好处
随着互联网的快速发展,网络安全问题日益突出,越来越多的企业和个人开始关注网络安全防护。其中,高防IP作为一种高效的防御手段,越来越受到用户的青睐。本文将介绍速盾网络高防IP的好处,帮助您了解其优势和应用场景。一…...
创建Maven Web工程
目录下也会有对应的生命周期。其中常用的是:clean、compile、package、install。 比如这里install ,如果其他项目需要将这里的模块作为依赖使用,那就可以 install 。安装到本地仓库的位置: Java的Web工程,所以我们要选…...
【PHP入门】2.2 流程控制
-流程控制- 流程控制:代码执行的方向 2.2.1控制分类 顺序结构:代码从上往下,顺序执行。(代码执行的最基本结构) 分支结构:给定一个条件,同时有多种可执行代码(块)&am…...
springCould中的zookeeper-从小白开始【3】
目录 1.启动zookeeper❤️❤️❤️ 2.创建8004模块 ❤️❤️❤️ 3.临时节点还是永久节点❤️❤️❤️ 4.创建zk80消费模块❤️❤️❤️ 1.启动zookeeper❤️❤️❤️ 进入自己zookeeper的bin目录下 分别使用命令: ./zkServer.sh start 和 ./zkCli.sh -serve…...
Node.js-模块化(二)
1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则&…...
MAC 安装nginx
使用Homebrew方式进行安装 步骤: 1、更新 Homebrew brew update 2、下载并安装 Nginx brew install nginx 3、查看 nginx 配置信息 brew info nginx zhanghuaBreeze ~ % brew info nginx // 版本信息 > nginx: stable 1.25.1 (bottled), HEAD HTTP(S) se…...
开源 AI 新秀崛起:Bittensor 更像是真正的“OpenAI”
强大的人工智能正在飞速发展,而完全由 OpenAI、Midjourney、Google(Bard)这样的少数公司控制 AI 不免让人感到担忧。在这样的背景下,试图用创新性解决方案处理人工智能中心化问题、权力集中于少数公司的 Bittensor,可谓…...
设计模式:循序渐进走入工厂模式
文章目录 前言一、引入二、简单工厂模式1.实现2.优缺点3.扩展 三、工厂方法模式1.实现2.优缺点 四、抽象工厂模式1.实现2.优缺点3.使用场景 五、模式扩展六、JDK源码解析总结 前言 软件设计模式之工厂模式。 一、引入 需求:设计一个咖啡店点餐系统。 设计一个咖啡类…...
如何将图片(matlab、python)无损放入word论文
许多论文对插图有要求,直接插入png、jpg一般是不行的,这是一篇顶刊文章(pdf)的插图,放大2400%后依旧清晰,搜罗了网上的方法,总结了一下如何将图片无损放入论文中。 这里主要讨论的是数据生成的图…...
在Next.js和React中搭建Cesium项目
在Next.js和React中搭建Cesium项目,需要确保Cesium能够与服务端渲染(SSR)兼容,因为Next.js默认是SSR的。Cesium是一个基于WebGL的地理信息可视化库,通常用于在网页中展示三维地球或地图。下面是一个基本的步骤,用于在Next.js项目中…...
docker学习(十、搭建redis集群,三主三从)
文章目录 一、docker创建6个redis容器创建6个redis容器回顾各个属性含义 二、划分主从,3主3从划分主从查看状态查看节点信息 docker搭建Redis集群相关知识: docker学习(九、分布式存储亿级数据知识) docker学习(十、搭…...
ES排错命令
GET _cat/indices?v&healthred GET _cat/indices?v&healthyellow GET _cat/indices?v&healthgreen确定哪些索引有问题,多少索引有问题。_cat API 可以通过返回结果告诉我们这一点 查看有问题的分片以及原因。 这与索引列表有关,但是索引…...
爬虫实战案例 -- 爬取豆瓣读书网页内容
进入网站检查信息 , 确定请求方式以及相关数据 找到爬取目标位置 开始敲代码 # 链接网站 def url_link(url):res requests.get(url,headers headers)response res.textparse_data(response)# 爬取信息 def parse_data(data):msg <li\sclass"media\sclearfix…...
某电子文档安全管理系统 SQL注入漏洞复现
漏洞介绍 亿赛通电子文档安全管理系统 (简称: CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护…...
ant-design-vue Message 用法以及内容为 html片段情况
全局配置: // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度位置duration: 2,//提示持续时间maxCount: 1,//最大页面同时展示几条 });项目中最常用的用法: 1. 字符串 message.success("导入成功");2. html片段 message.error…...
2024 Move 开发者大会火热报名中!1 月 13 至 14 日上海见
2024 Move 开发者大会将于 1 月 13 日至 1 月 14 日在上海举办。本届 Move 开发者大会以 “Move 生态关键的一年” 为主题,由 MoveFuns 、OpenBuild 和 MoveBit 主办,Rooch、AptosGlobal、alcove、zkMove、云赛空间和 TinTinLand 协办,并得到…...
hbase用shell命令新建表报错ERROR: KeeperErrorCode = NoNode for /hbase/master
或者HMster开启后几秒消失问题解决 报错如图: 首先jps命令查看当前运行的内容有没有HMaster,如果没有,开启一下hbase,稍微等一会儿,再看一下HMaster,如果仍和下图一样没有,就基本找到问题了 本人问题原因:hbase-site…...
PyQt中的冒号(:)
在这段代码中,冒号(:)的使用是类型注解的一种形式,用于显式地指定变量的类型。在Python 3.5及以后的版本中,引入了类型注解的概念,可以在变量名后面使用冒号来注解变量的类型。 例如,在以下代码…...
yolo-nas无人机高空红外热数据小目标检测(教程+代码)
前言 YOLO-NAS是目前最新的YOLO目标检测模型。从一开始,它就在准确性方面击败了所有其他 YOLO 模型。与之前的 YOLO 模型相比,预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标。但是我们如何在自定义数据集上训练 YOLO NAS? 这将是我…...
Ubuntu22.04安装python2
Ubuntu 20.04是继Ubuntu 18.04 LTS之后的下一个长期支持(LTS)版本,从Ubuntu 20.04开始系统不再预装python2。 如果我们有一些老旧的代码需要运行,可以在新版的Ubuntu系统上自行安装python2。 安装命令: sudo apt install python2查看pytho…...
【Amazon 实验①】Amazon WAF功能增强之实验环境准备
文章目录 1. 实验介绍2. 实验环境准备 1. 实验介绍 在真实的网络空间中,攻击者会使用大量广泛分布的僵尸网络、肉机等发起对目标的攻击。 其来源分布一般比较分散,因此难以简单防范。 本实验联合使用有多种AWS服务:Cloudfront、 Lambdaedge…...
Qt不能在线程函数操作UI
Qt的官方文档虽然并没有明确说明,不能在子线程中操作UI,但是,因为Qt是事件循环机制,所有的UI事件都是在主线程中处理的,如果在子线程中直接操作UI,就会存在线程安全问题,严重时候会使程序挂掉。…...
web网页端使用webSocket实现语音通话功能(SpringBoot+VUE)
写在前面 最近在写一个web项目,需要实现web客户端之间的语音通话,期望能够借助webSocket全双工通信的方式来实现,但是网上没有发现可以正确使用的代码。网上能找到的一个代码使用之后只能听到“嘀嘀嘀”的杂音 解决方案:使用Jso…...
读取spring boot项目resource目录下的文件
背景 项目开发过程中,有一些情况下将配置文件放在resource下能简化代码实现和部署时的打包步骤。例如: 项目中使用的数据库升级脚本、初始化脚本。将文件放到resource下,打包在jar包中,不能直接通过File路径读取。下面介绍两种读…...
R语言生物群落(生态)数据统计分析与绘图实践技术
R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。本内容以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线,通过多个来…...
品牌手机网站开发/seo服务收费
import matplotlib.pyplot as plt from PIL import Imageroot r"G:\01.jpg"plt.imshow(Image.open(root))ax plt.gca() # 默认框的颜色是黑色,第一个参数是左上角的点坐标 # 第二个参数是宽,第三个参数是长 ax.add_patch(plt.Rectangle((100…...
专做logo网站叫什么地方/网站描述和关键词怎么写
在物联网时代,计算机和移动电话已经成为必需品。人们使用计算机和各种电子产品进行办公和学习等操作,有着个人隐私在其中,因此一个人拥有多种密码。如果您在计算机上设置了密码,但却忘记了怎么办。下面说说3种解决方法。如果需要系…...
济南快速排名/seo黑帽技术
1,操作文件类(File) 1.1,File类的基本介绍 在整个io包中,唯一与文件本身相关的类就是File类。使用File类可以进行创建或删除文件等常用操作,如果要使用一个File类,则必须向File类的构造方法中传…...
做做网站2023下载/深圳市龙华区
一、体验环境使用设备:iPhone 6S操作系统:iOS 10.1.1产品版本:3.1.1操作时间:2018.1.13二、产品体验(一)战略层1.产品定位Slogan:得到——和你一起终身学习得到是一个知识付费型的线上知识学习平台:通过提供…...
中小企业网站建设价格/全网营销整合推广
近日,微软的EF团队发布了一个针对SQL Server的Sample Database Provider Entity Framework 5,支持EF的一些新特性。 这个新的Sample Provider支持如下EF 5的新特性: Spatial typesTable Valued Functions带有多个结果集的存储过程然而&#x…...
滨江区建设局网站/自动搜索关键词软件
1. 连接ftp服务器 格式:ftp [hostname ip-address] a)在linux命令行下输入:ftp 10.18.34.115 b)服务器询问你用户名和口令,分别输入yint和相应密码,待认证通过即可。 2. 下载文件 下载文件通常用get和mget这两条命令。 a) get 格…...