.net Core 上传文件详解

net core 和.net framework上传文件有很多需要注意的地方

.net framework 上传文件用httppostedfilebase

.net core 上传文件用 IFormFile

一、首先需要配置在startup 中的Configure方法内新增以下代码

app.UseStaticFiles();

而配置Apk下载需要加以下代码,与上面的app.UseStaticFiles()并不冲突

  1. app.UseStaticFiles(new StaticFileOptions
  2. {
  3. //FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
  4. //设置不限制content-type 该设置可以下载所有类型的文件,但是不建议这么设置,因为不安全
  5. //下面设置可以下载apk和nupkg类型的文件
  6. ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
  7. {
  8. { ".apk", "application/vnd.android.package-archive" }
  9. })
  10. });

如下图:

 

如果被限制上传大小,需要在startup 中的ConfigureServices新增如下代码:

  1. services.Configure<FormOptions>(x =>
  2. {
  3. x.MultipartBodyLengthLimit = int.MaxValue;
  4. });

如下图:

二、上传文件到wwwroot/虚拟目录中,需要在项目内新增一个文件夹,更名为wwwroot

如下图:

 

三、控制器(UploadController)需要注入IWebHostEnvironment

  1. private readonly IWebHostEnvironment _env;
  2. public UploadController(IWebHostEnvironment env)
  3. {
  4. _env = env;
  5. }

如下图:

四、需要在控制器方法配置 [RequestSizeLimit(int.MaxValue)] 上传文件大小限制改为最大值,附上传文件代码

复制代码
/// <summary>
/// 上传包文件
/// </summary>
/// <param name="files">文件</param>
/// <param name="VersionCode">版本代码</param>
/// <param name="Creator">上传人</param>
/// <returns></returns>
[HttpPost("UploadPackage")]
[RequestSizeLimit(int.MaxValue)]
public async Task<ApiResult> UploadPackage([FromForm(Name = "files")] List<IFormFile> files,
[FromForm] string VersionCode, [FromForm] string Creator)
{
string FileTime = DateTime.Now.ToString("yyyyMMdd");
string uploadPath = Path.Combine(_env.WebRootPath, "CommonUpLoadFile", FileTime);//上传路径;虚拟目录wwwroot\CommonUpLoadFile\..
try
{
string fileName = string.Empty;
string QueryPath = string.Empty;
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
if (!Directory.Exists(uploadPath)) //不存在则创建路径
{
Directory.CreateDirectory(uploadPath);
}
fileName = formFile.FileName;
string savePath = Path.Combine(uploadPath, fileName);//保存文件
QueryPath = $"{CU_server.UploadQuery_String}CommonUpLoadFile/{FileTime}/{fileName}";//查询的文件名;CU_server.UploadQuery_String指向虚拟目录wwwroot
using (var stream = System.IO.File.Create(savePath))
{
await formFile.CopyToAsync(stream);
}
}
}
return OkResult("上传成功");
}
catch (Exception ex)
{
return MessageResult(404, $"上传出现错误,错误原因:{ex.Message}");
}
}
复制代码

 

如图:



注:附上官方 .NET Core 上传文件文档

PostMan测试截图

 

 

转 https://www.shuzhiduo.com/A/obzbln065E/

posted @   dreamw  阅读(852)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示