当我将大文件上传到Azure上时,我遇到了问题。我正在从事一个ASP.NET Core5.0API项目。我已经实现了有关微软推荐的功能。此外,我还添加了一个池机制,这样前端应用程序就有了另一个端点来检查上传状态。当我在本地运行时,一切都很好,但是Azure上的一个大文件有问题。我的API正在使用。它为大型文件返回502个坏网关(大于1GB)。
我做了一个测试,98 %的时间是阅读流。来自Microsft的文档是:
if (MultipartRequestHelper
.HasFileContentDisposition(contentDisposition))
{
untrustedFileNameForStorage = contentDisposition.FileName.Value;
// Don't trust the file name sent by the client. To display
// the file name, HTML-encode the value.
trustedFileNameForDisplay = WebUtility.HtmlEncode(
contentDisposition.FileName.Value);
streamedFileContent =
await FileHelpers.ProcessStreamedFile(section, contentDisposition,
ModelState, _permittedExtensions, _fileSizeLimit);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
}我知道Azure应用服务上有230秒的负载平衡超时,但是当我使用postman测试它时,大多数情况下502是30秒后返回的。
也许我需要在Azure应用程序服务上设置一些配置功能?始终处于启用状态。
我想继续使用Azure应用程序服务,但我正在考虑迁移到Azure App服务,或者允许前端应用程序直接将文件上传到Azure Blob存储。
你知道怎么解决吗?
发布于 2021-03-30 02:19:03
新集
前面的答案是基于仅使用app服务,但不建议将大型文件存储在app服务中。第一种是未来的更新将变得越来越慢,第二种是磁盘空间将很快耗尽。
因此建议使用天蓝色储藏室。如果您使用天蓝色存储,建议2建议2更大的文件上传大文件块。
预览
请确认是否可以成功地传输大文件,即使错误消息返回500个错误。
我以前研究过这一现象,每个浏览器都不同,错误时间大约在230~300秒之间。但是通过日志,程序继续运行。
相关职位:
因此,我有两个建议,你可以参考:
建议1:
建议在您的程序中创建一个http接口(假设名称为getStatus)来接收文件上传进度,类似于processbar。当文件开始传输时,监视上传进度,上传文件接口,返回HttpCode 201接受,然后通过getStatus获得状态值,当状态值达到100%时,返回成功。
建议2:
使用MultipartRequestHelper剪切/切片大文件。你的用法可能是错的。请参考下面的帖子。
.net内核的版本是不一致的,但是思想是相同的.
发布于 2022-07-08 07:23:02
同样的问题是,如何通过as.net核心api上传更大的文件(高达100 as ),并将超时设置为10分钟,并将这些属性应用于实际操作。
RequestFormLimits(MultipartBodyLengthLimit = 209715200)甚至已配置为接受200 to (options => )
{
options.Limits.MaxRequestBodySize = 209715200;
options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10);
});文件内容是请求对象中的base64格式。如果在这个问题上有任何帮助的话,非常感谢。
https://stackoverflow.com/questions/66850028
复制相似问题