繁体   English   中英

上传大文件 - Azure App Service 上的 502 bad gateway 错误

[英]Upload large file - 502 bad gateway error on Azure App Service

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

我做了一个测试,98% 的时间是读取 stream。 从 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 测试它时,在大多数情况下,30 秒后返回 502。

也许我需要在 Azure App Service 上设置一些配置功能? 始终开启已启用。

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

你知道如何解决它吗?

新闻组

在 ASP.NET Core 3.1 中上传和下载大文件?

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

所以推荐使用azure存储。 如果你使用azure存储,建议2对于大文件,分块上传大文件。

预习

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

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

相关帖子:

请求超时。 web服务器未能在指定时间内响应

所以我给出两个建议,大家可以参考:

建议一:

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

建议二:

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

处理 ASP.NET Core 1.0 上的大文件上传

.net内核版本不一致,但思路是一样的。

通过 as.net core api 上传较大尺寸(最大 100MB)的文档时面临类似问题,托管为 azure 应用程序网关,并将超时设置为 10 分钟并将这些属性应用于操作
[RequestFormLimits(MultipartBodyLengthLimit = 209715200)] [RequestSizeLimit(209715200)] 甚至红隼已配置为接受 200MB UseKestrel(options =>

               {
                    options.Limits.MaxRequestBodySize = 209715200;
                    options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10);
                });

请求 object 中的文件内容为 base64 格式。 感谢您对这个问题是否有任何帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM