ASP.NET Core单个文件和多个文件上传并保存到服务器
前言:
在我们日常开发中,将图片、视频、音频、文档等相关文件上传并保存到服务器是很常见的功能。今天主要记录一下我们开发中常用的两种方法,方便大家使用。直接使用希望可以帮助到有需要的同学!
1。在 www.introzo.com Core 中配置静态文件:
简要概述:
在www.introzo.com Core应用中,静态资源文件需要进行相应的配置才能提供给客户端直接使用。
详细说明请参考官方文档:
https://www.introzo.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1
配置简单,提供Web根目录下的文件:
在Startup.Configure中调用UseStaticFiles方法进行配置:
public void 配置(IApplicationBuilder 应用程序) { app.UseStaticFiles(); }
2。文件服务器和应用程序配置(IIS、Kestrel):
详细说明请参考官方文档:
https://www.introzo.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1#server-and-app-configuration
多部分文本长度限制:
MultipartBodyLengthLimit 设置每个多部分主体的长度限制。 当解析超出此限制的表单部分时,将引发 InvalidDataException。 默认值为 134,217,728 (128 MB)。 使用 MultipartBodyLengthLimit 中的 Startup.ConfigureServices
设置来自定义此限制:
公共无效ConfigureServices(IServiceCollection服务) { services.Configure(选项=> { // 将限制设置为 256 MB 选项.MultipartBodyLengthLimit = 268435456; }); }
Kestrel 最大请求车身尺寸:
对于 Kestrel 托管的应用程序,默认最大请求正文大小为 30,000,000 字节,大约为 28.6 MB。 使用 MaxRequestBodySize Kestrel 服务器选项自定义限制:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureKestrel((上下文,选项) => { // 处理最大 50 MB 的请求 选项.Limits.MaxRequestBodySize = 52428800; }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup();});
IIS 内容长度限制:
默认请求限制 (maxAllowedContentLength
) 为 30,000,000 字节,大约 28.6 MB。 请在 web.config 文件中自定义此限制:
3。单文件上传:
使用系统; 使用www.introzo.com; 使用 Microsoft.AspNetCore.Hosting; 使用 Microsoft.AspNetCore.Http; 使用Microsoft.AspNetCore.Mvc; 命名空间 FileUploadManage.Controllers { ////// 图片、视频、音频、文档等相关文件的通用上传服务 /// public 类 FileUploadController:控制器 { 私有 静态 IHostingEnvironment _hostingEnvironment; publicFileUploadController(IHostingEnvironment托管环境) { _hostingEnvironment = 托管环境; } /// ///单个文件上传(ajax和Form表单均适用) /// /// publicJsonResult SingleFileUpload() { var formFile = Request.Form.Files[0];//获取请求发送的文件 var currentDate = www.introzo.com; var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于 HttpContext.Current.Server.MapPath("") 尝试 { var 文件路径 = $"/UploadFile/{currentDate:yyyyMMdd}/"; // 创建日常存储文件夹 if (!Directory.Exists(webRootPath + 文件路径)) { Directory.CreateDirectory(webRootPath + filePath); } if(formFile!=null) { //文件后缀var fileExtension = Path.GetExtension(formFile.FileName);// 获取文件格式和扩展名 //判断文件大小 var fileSize = formFile.Length; ? 024b) { 返回 new JsonResult(new { isSuccess = false , resultMsg = "上传的文件不能大于10M"}); } //保存的文件名(以名称和保存时间命名) var saveName = formFile.FileName.Substring(0, formFile.FileName.LastIndexOf('.' )) + " _" + currentDate.ToString("HHmmss") + fileEx紧张; //文件保存使用 (var fs = System.IO.File.Create(webRootPath + filePath + saveName)) { formFile.CopyTo(fs); fs.Flush(); } //完整文件路径 varcompleteFilePath =Path.Combine(filePath, saveName); 返回 new JsonResult(new { isSuccess = true ,返回消息 = "上传成功",completeFilePath =completeFilePath }); } 其他 { 返回 new JsonResult(new { isSuccess = false , resultMsg = "上传失败,上传未检测到文件信息~"}); } } catch(例外情况) {返回 new JsonResult(new { isSuccess = false , resultMsg = "保存文件失败,异常消息为:" + ex.Message }); } } /// /// 表单单个文件上传 /// /// 表单文件流程信息 /// publicJsonResult FormSingleFileUpload(IFormFile formFile) { var currentDate = www.introzo.com; var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于 HttpContext.Current.Server.MapPath("") 尝试 { var 文件路径 = $"/UploadFile/{currentDate:yyyyMMdd}/"; // 创建日常存储文件夹 if (!Directory.Exists(webRootPath + 文件路径)) {Directory.CreateDirectory(webRootPath + filePath); } if(formFile!=null) { //文件后缀 var fileExtension = Path.GetExtension(formFile.FileName);// 获取文件格式和扩展名 //判断文件大小 var fileSize = formFile.Length; ? 024b) { 返回 new JsonResult(new { isSuccess = false , resultMsg = "上传的文件不能大于10M"}); } //保存的文件名(以名称和保存时间命名)var saveName = formFile.FileName.Substring(0, formFile.FileName.LastIndexOf('.' )) + " _" + currentDate.ToString("HHmmss") + fileEx紧张; //文件保存 使用 (var fs = System.IO.File.Create(webRootPath + filePath + saveName)) { formFile.CopyTo(fs); fs.Flush(); } //完整文件路径 varcompleteFilePath =Path.Combine(filePath, saveName); 返回 new JsonResult(new { isSuccess = true ,返回消息 = "上传成功",completeFilePath =completeFilePath }); } 其他 {返回 new JsonResult(new { isSuccess = false , resultMsg = "上传失败,上传未检测到文件信息~"}); } } catch(例外情况) { 返回 new JsonResult(new { isSuccess = false , resultMsg = "保存文件失败,异常消息为:" + ex.Message }); } } } }
4。多个文件上传:
使用系统; 使用System.Collections.Generic; 使用www.introzo.com; 使用 Microsoft.AspNetCore.Hosting; 使用 Microsoft.AspNetCore.Http; 使用 Microsoft.AspNetCore.Http.Internal; 使用Microsoft.AspNetCore.Mvc; 使用 Microsoft.EntityFrameworkCore.Internal; 命名空间 FileUploadManage.Controllers { ////// 图片、视频、音频、文档等相关文件的通用上传服务 ///public 类 FileUploadController:控制器 { 私有 静态 IHostingEnvironment _hostingEnvironment; publicFileUploadController(IHostingEnvironment托管环境) { _hostingEnvironment = 托管环境; } /// /// 多个文件上传 /// /// 形成收藏价值 /// 服务器存储的文件信息 publicJsonResult MultiFileUpload(IFormCollection formCollection) { var currentDate = www.introzo.com; var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于 HttpContext.Current.Server.MapPath("") var uploadFileRequestList = 新列表 (); 尝试 { //FormCollection 转换为 FormFileCollectionvar 文件= (FormFileCollection)formCollection.Files; if(文件.Any()) { foreach(var文件in文件) { var uploadFileRequest = new UploadFileRequest(); var 文件路径 = $"/UploadFile/{currentDate:yyyyMMdd}/"; // 创建日常存储文件夹 if (!Directory.Exists(webRootPath + 文件路径)) { Directory.CreateDirectory(webRootPath + filePath); } //文件后缀 var fileExtension = Path.GetExtension(file.FileName);// 获取文件格式和扩展名 //判断文件大小var fileSize = file.Length; ? 024b) { 继续; } //保存的文件名(以名称和保存时间命名) var saveName = file.FileName.Substring(0, file.FileName.LastIndexOf('.' )) + " _" + currentDate.ToString("HHmmss") + fileEx紧张; //文件保存 使用 (var fs = System.IO.File.Create(webRootPath + filePath + saveName)) { 文件.CopyTo(fs); fs.Flush(); } //完整文件路径varcompleteFilePath =Path.Combine(filePath, saveName); uploadFileRequestList.Add(new UploadFileRequest() { 文件名 = 保存名称, 文件路径 = 完整文件路径 }); } } 其他 { 返回 new JsonResult(new { isSuccess = false , resultMsg = "上传失败,上传未检测到文件信息~"}); } } catch(例外情况) { 返回 new JsonResult(new { isSuccess = false , resultMsg = "保存文件失败,异常消息为:" + ex.Message }); } if (uploadFileRequestList.Any()) {返回 new JsonResult(new { isSuccess = true ,返回消息 = "上传成功", filePathArray = uploadFileRequestList }); } 其他 { 返回 new JsonResult(new { isSuccess = false , resultMsg = "网络打瞌睡,文件保存失败" }); } } } /// /// 文件上传响应模型 /// 公共 类UploadFileRequest { /// /// 文件名 /// public string 文件名 { get; 套装; } /// /// 文件路径 /// public string 文件路径 { get; 套装; } } }
相关文章
- 10-05 什么是共享单车黑名单制度?共享单车黑名单制度
- 10-05 如何开启Android手机的便携式热点功能
- 10-05 360n5s发布会直播地址360n5s新品发布会视
- 10-05 【第200期】面试官:您能简单讲一下SpringM
- 10-05 【第411期】Docker连杀15题,你能坚持哪题
- 10-05 【第432期】面试官:您的项目中使用Redis的目
- 10-05 ZEEKR 001 FR高性能车型预热:搭载4电机
- 10-05 我国网民规模达10.79亿,互联网普及率达76.4
- 10-05 《2023年标准地图》正式上线
- 10-05 stm32内存包括哪些类型(stm32内存分为几个
- 10-05 stm32采集+数据处理程序(stm32采集+数据
- 10-05 stm32仿真图的引脚如何连接(stm32仿真器接
- 10-05 Zabbix警告问题
- 10-05 Zabbix集成云预警(瑞祥云)实现电话短信预警
- 10-05 利用企业微信实现预警(shell+python)
- 10-05 高通CEO爆料苹果自研5G芯片明年准备就绪
- 10-05 全球智能手机市场被扰乱:iPhone与Androi
- 10-05 苹果最新巧克力广告:Apple Card激活到付款
- 10-05 苹果推出iOS 15.6正式版固件:我们来看看iO
- 10-05 iPadOS 16 允许应用程序使用 M1 设备存
- 最近发表