时间:2021-05-28
前言:
在我们日常开发中,关于图片,视频,音频,文档等相关文件上传并保存到服务端中是非常常见的一个功能,今天主要是把自己在开发中常用的两种方式记录下来方便一下直接使用,并且希望能够帮助到有需要的同学!
一、配置ASP.NET Core中的静态文件:
简单概述:
在ASP.NET Core应用中静态资源文件需要进行相应的配置才能够提供给客户端直接使用。
详情描述请参考官方文档:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1
简单配置,提供 Web 根目录内的文件:
调用 Startup.Configure中的UseStaticFiles 方法配置:
二、文件服务器和应用程序配置(IIS,Kestrel):
详情描述,请参考官方文档说明:
https://docs.microsoft.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 设置自定义此限制:
public void ConfigureServices(IServiceCollection services){ services.Configure<FormOptions>(options => { // Set the limit to 256 MB options.MultipartBodyLengthLimit = 268435456; });}Kestrel 最大请求正文大小:
对于 Kestrel 托管的应用,默认的最大请求正文大小为 30,000,000 个字节,约为 28.6 MB。 使用 MaxRequestBodySize Kestrel 服务器选项自定义限制:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { // Handle requests up to 50 MB options.Limits.MaxRequestBodySize = 52428800; }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });IIS 内容长度限制:
默认的请求限制 (maxAllowedContentLength) 为 30,000,000 字节,大约 28.6 MB。 请在 web.config 文件中自定义此限制:
<system.webServer> <security> <requestFiltering> <!-- Handle requests up to 50 MB --> <requestLimits maxAllowedContentLength="52428800" /> </requestFiltering> </security></system.webServer>三、单文件上传:
using System;using System.IO;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Mvc;namespace FileUploadManage.Controllers{ /// <summary> /// 图片,视频,音频,文档等相关文件通用上传服务类 /// </summary> public class FileUploadController : Controller { private static IHostingEnvironment _hostingEnvironment; public FileUploadController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; } /// <summary> /// 单文件上传 /// </summary> /// <returns></returns> public JsonResult SingleFileUpload() { var formFile = Request.Form.Files[0];//获取请求发送过来的文件 var currentDate = DateTime.Now; var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于HttpContext.Current.Server.MapPath("") try { var filePath = $"/UploadFile/{currentDate:yyyyMMdd}/"; //创建每日存储文件夹 if (!Directory.Exists(webRootPath + filePath)) { Directory.CreateDirectory(webRootPath + filePath); } if (formFile != null) { //文件后缀 var fileExtension = Path.GetExtension(formFile.FileName);//获取文件格式,拓展名 //判断文件大小 var fileSize = formFile.Length; if (fileSize > 1024 * 1024 * 10) //10M TODO:(1mb=1024X1024b) { return new JsonResult(new { isSuccess = false, resultMsg = "上传的文件不能大于10M" }); } //保存的文件名称(以名称和保存时间命名) var saveName = formFile.FileName.Substring(0, formFile.FileName.LastIndexOf('.'))+"_"+currentDate.ToString("HHmmss")+ fileExtension; //文件保存 using (var fs = System.IO.File.Create(webRootPath + filePath + saveName)) { formFile.CopyTo(fs); fs.Flush(); } //完整的文件路径 var completeFilePath = Path.Combine(filePath, saveName); return new JsonResult(new { isSuccess = true, returnMsg = "上传成功", completeFilePath = completeFilePath }); } else { return new JsonResult(new { isSuccess = false, resultMsg = "上传失败,未检测上传的文件信息~" }); } } catch (Exception ex) { return new JsonResult(new { isSuccess = false, resultMsg = "文件保存失败,异常信息为:" + ex.Message }); } } }}四、多文件上传:
using System;using System.Collections.Generic;using System.IO;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Http.Internal;using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore.Internal;namespace FileUploadManage.Controllers{ /// <summary> /// 图片,视频,音频,文档等相关文件通用上传服务类 /// </summary> public class FileUploadController : Controller { private static IHostingEnvironment _hostingEnvironment; public FileUploadController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; } /// <summary> /// 多文件上传 /// </summary> /// <param name="formCollection">表单集合值</param> /// <returns>服务器存储的文件信息</returns> public JsonResult MultiFileUpload(IFormCollection formCollection) { var currentDate = DateTime.Now; var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于HttpContext.Current.Server.MapPath("") var uploadFileRequestList = new List<UploadFileRequest>(); try { //FormCollection转化为FormFileCollection var files = (FormFileCollection)formCollection.Files; if (files.Any()) { foreach (var file in files) { var uploadFileRequest = new UploadFileRequest(); var filePath = $"/UploadFile/{currentDate:yyyyMMdd}/"; //创建每日存储文件夹 if (!Directory.Exists(webRootPath + filePath)) { Directory.CreateDirectory(webRootPath + filePath); } //文件后缀 var fileExtension = Path.GetExtension(file.FileName);//获取文件格式,拓展名 //判断文件大小 var fileSize = file.Length; if (fileSize > 1024 * 1024 * 10) //10M TODO:(1mb=1024X1024b) { continue; } //保存的文件名称(以名称和保存时间命名) var saveName = file.FileName.Substring(0, file.FileName.LastIndexOf('.')) + "_" + currentDate.ToString("HHmmss") + fileExtension; //文件保存 using (var fs = System.IO.File.Create(webRootPath + filePath + saveName)) { file.CopyTo(fs); fs.Flush(); } //完整的文件路径 var completeFilePath = Path.Combine(filePath, saveName); uploadFileRequestList.Add(new UploadFileRequest() { FileName = saveName, FilePath = completeFilePath }); } } else { return new JsonResult(new { isSuccess = false, resultMsg = "上传失败,未检测上传的文件信息~" }); } } catch (Exception ex) { return new JsonResult(new { isSuccess = false, resultMsg = "文件保存失败,异常信息为:" + ex.Message }); } if (uploadFileRequestList.Any()) { return new JsonResult(new { isSuccess = true, returnMsg = "上传成功", filePathArray = uploadFileRequestList }); } else { return new JsonResult(new { isSuccess = false, resultMsg = "网络打瞌睡了,文件保存失败" }); } } } /// <summary> /// 对文件上传响应模型 /// </summary> public class UploadFileRequest { /// <summary> /// 文件名称 /// </summary> public string FileName { get; set; } /// <summary> /// 文件路径 /// </summary> public string FilePath { get; set; } }}到此这篇关于ASP.NET Core单文件和多文件上传并保存到服务端的方法的文章就介绍到这了,更多相关ASP.NET Core文件上传内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
作者:追逐时光
作者简介:一个热爱编程,善于分享,喜欢学习、探索、尝试新事物,新技术的程序猿。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
写完asp.net多文件上传后,感觉这种上传还是有很多缺陷,于是。。。(省略一万字,不废话)。这里我没用传统的asp.net,而选择了开源的asp.netcor
本文实例讲述了ASP.NET简单获取服务端和客户端计算机名称的方法。分享给大家供大家参考,具体如下://获取服务端计算机名称stringserverPCName
小编之前也介绍了许多ASP.NET文件上传的解决案例,今天来个asp.net文件上传大集合。1使用标准HTML来进行图片上传前台代码:使用标准HTML来进行图片
1.不建议在安装了主控端的服务器上支持ASP.net,因为Asp.Net有大量未知的安全问题。2.如果用户需要用ASP.net写文件或目录,需要增加以下的权限。
本文实例讲述了python实现的文件同步服务器。分享给大家供大家参考。具体实现方法如下:服务端使用asyncore,收到文件后保存到本地。客户端使用pyinot