ashx 上传文件到服务器,ASP.NET Core单文件和多文件上传并保存到服务端的方法

前言:

在我们日常开发中,关于图片,视频,音频,文档等相关文件上传并保存到服务端中是非常常见的一个功能,今天主要是把自己在开发中常用的两种方式记录下来方便一下直接使用,并且希望能够帮助到有需要的同学!

一、配置ASP.NET Core中的静态文件:

简单概述:

在ASP.NET Core应用中静态资源文件需要进行相应的配置才能够提供给客户端直接使用。

简单配置,提供 Web 根目录内的文件:

调用 Startup.Configure中的UseStaticFiles 方法配置:

public void Configure(IApplicationBuilder app)

{

app.UseStaticFiles();

}

二、文件服务器和应用程序配置(IIS,Kestrel):

多部分正文长度限制:

MultipartBodyLengthLimit 设置每个多部分正文的长度限制。 分析超出此限制的窗体部分时,会引发 InvalidDataException。 默认值为 134,217,728 (128 MB)。 使用 MultipartBodyLengthLimit 中的 Startup.ConfigureServices 设置自定义此限制:

public void ConfigureServices(IServiceCollection services)

{

services.Configure(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();

});

IIS 内容长度限制:

默认的请求限制 (maxAllowedContentLength) 为 30,000,000 字节,大约 28.6 MB。 请在 web.config 文件中自定义此限制:

三、单文件上传:

using System;

using System.IO;

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.Mvc;

namespace FileUploadManage.Controllers

{

///

/// 图片,视频,音频,文档等相关文件通用上传服务类

///

public class FileUploadController : Controller

{

private static IHostingEnvironment _hostingEnvironment;

public FileUploadController(IHostingEnvironment hostingEnvironment)

{

_hostingEnvironment = hostingEnvironment;

}

///

/// 单文件上传

///

///

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

{

///

/// 图片,视频,音频,文档等相关文件通用上传服务类

///

public class FileUploadController : Controller

{

private static IHostingEnvironment _hostingEnvironment;

public FileUploadController(IHostingEnvironment hostingEnvironment)

{

_hostingEnvironment = hostingEnvironment;

}

///

/// 多文件上传

///

/// 表单集合值

/// 服务器存储的文件信息

public JsonResult MultiFileUpload(IFormCollection formCollection)

{

var currentDate = DateTime.Now;

var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于HttpContext.Current.Server.MapPath("")

var uploadFileRequestList = new List();

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 = "网络打瞌睡了,文件保存失败" });

}

}

}

///

/// 对文件上传响应模型

///

public class UploadFileRequest

{

///

/// 文件名称

///

public string FileName { get; set; }

///

/// 文件路径

///

public string FilePath { get; set; }

}

}

到此这篇关于ASP.NET Core单文件和多文件上传并保存到服务端的方法的文章就介绍到这了,更多相关ASP.NET Core文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

作者:追逐时光

作者简介:一个热爱编程,善于分享,喜欢学习、探索、尝试新事物,新技术的程序猿。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值