【问题标题】:Upload large file - 502 bad gateway error on Azure App Service上传大文件 - Azure App Service 上出现 502 bad gateway 错误
【发布时间】:2021-06-25 05:39:11
【问题描述】:

我在 Azure 上上传大文件时遇到问题。我正在开发一个 ASP.NET Core 5.0 API 项目。 我已经实现了关于Microsoft recommendation 的功能。此外,我添加了一个池机制,因此前端应用程序有另一个端点来检查上传状态。 当我在本地运行时一切正常,但我在 Azure 上遇到了一个大文件的问题。我的 API 使用的是 Azure App Service Premium P1v3。它为大文件(超过 1GB)返回 502 错误网关。

我做了一个测试,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 秒的负载均衡器超时,但是当我使用邮递员测试它时,大多数情况下 30 秒后返回 502。

也许我需要在 Azure 应用服务上设置一些配置功能?始终开启。

我想继续使用 Azure 应用服务,但我正在考虑迁移到 Azure 应用服务或允许前端应用程序将文件直接上传到 Azure Blob 存储。

你知道怎么解决吗?

【问题讨论】:

  • 如果我的回复有帮助,请采纳为答案(点击回复旁边的标记选项将其从灰色切换为填写。),请参阅meta.stackexchange.com/questions/5234/…
  • 您好,我遇到了一个非常相似的问题,但是使用 NodeJs,您能解决这个问题吗?我已经为此苦苦挣扎了好几天

标签: c# .net azure asp.net-core azure-web-app-service


【解决方案1】:

新闻组

Uploading and Downloading large files in ASP.NET Core 3.1?

前面的答案都是基于只使用应用服务,但不建议在应用服务中存储大文件。一是以后更新会越来越慢,二是磁盘空间很快就会用完。

所以建议使用天蓝色存储。如果使用azure存储,建议大文件建议2分块上传大文件。

预览

即使报错信息返回500错误,请确认大文件是否可以传输成功。

我之前研究过这个现象,每个浏览器都不一样,500错误时间大致在230s-300s之间。但是查看日志,程序继续运行。

相关帖子:

The request timed out. The web server failed to respond within the specified time

所以我给的有两个建议,大家可以参考一下:

建议一:

建议在你的程序中创建一个http接口(假设名称为getStatus)来接收文件上传进度,类似于processbar。当文件开始传输时,监听上传进度,上传文件接口,返回HttpCode 201 accept,然后通过getStatus获取状态值,达到100%时返回成功。

建议二:

使用MultipartRequestHelper 剪切/切片大文件。您的用法可能是错误的。请参考下面的帖子。

Dealing with large file uploads on ASP.NET Core 1.0

.net core版本不一致,但思路一致。

【讨论】:

猜你喜欢
  • 2021-03-31
  • 2014-07-08
  • 2019-05-04
  • 1970-01-01
  • 2020-11-04
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多