Asp.NET Core中,默认允许文件上传大小才20多M,上传的文件超过这个大小就报错。要修改限制,要改两个地方。
比如要允许最大上传大小为2G。
1.在web.config(没有的话建一个,或者把发布后自动生成的web.config拷回项目中)添加requestFiltering节点
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<security>
<requestFiltering>
<!--2048MB -->
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" arguments="%LAUNCHER_ARGS%" />
</system.webServer>
</location>
</configuration>
2.控制器中,在action上面加
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 2147483648)]//2000M 2147483648 2G
[RequestSizeLimit(2147483648)]
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 2147483648)]//2000M 2147483648 2G
[RequestSizeLimit(2147483648)]
public async Task UploadFile(List file1)
{
var listObj = new List();
foreach (var formFile in file1)
{
var newFileName = Guid.NewGuid().ToString("N") + Path.GetExtension(formFile.FileName);// formFile.FileName;
var filePath = uploadFolder + newFileName;
if (formFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
var obj = new
{
date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
newFileName,
originalFileName = formFile.FileName,
size = formFile.Length,
};
listObj.add(obj)
}
return JsonConvert.SerializeObject(listObj);
}
3.视图(这部分不用修改,为了完整也贴出来)
file1与第2步控制器中的file1对应
<form action="/控制器名/UploadFile" method="post" enctype="multipart/form-data">
<input type="file" name="file1"/>
<input type="submit" name="submit" value="上传" onclick="this.value='上传中...'" />
</form>
大文件建议使用分块上传