.net Core 上传文件详解
net core 和.net framework上传文件有很多需要注意的地方
.net framework 上传文件用httppostedfilebase
.net core 上传文件用 IFormFile
一、首先需要配置在startup 中的Configure方法内新增以下代码app.UseStaticFiles();
而配置Apk下载需要加以下代码,与上面的app.UseStaticFiles()并不冲突
app.UseStaticFiles(new StaticFileOptions
{
//FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
//设置不限制content-type 该设置可以下载所有类型的文件,但是不建议这么设置,因为不安全
//下面设置可以下载apk和nupkg类型的文件
ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
{
{ ".apk", "application/vnd.android.package-archive" }
})
});
如下图:

如果被限制上传大小,需要在startup 中的ConfigureServices新增如下代码:
services.Configure<FormOptions>(x =>
{
x.MultipartBodyLengthLimit = int.MaxValue;
});
如下图:
二、上传文件到wwwroot/虚拟目录中,需要在项目内新增一个文件夹,更名为wwwroot
如下图:

三、控制器(UploadController)需要注入IWebHostEnvironment
private readonly IWebHostEnvironment _env;
public UploadController(IWebHostEnvironment env)
{
_env = env;
}
如下图:
四、需要在控制器方法配置 [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/