在通过 Postman 上传大文件时(从前端用 php 编写的表单,我遇到了同样的问题)我从 Azure Web 应用程序收到了 502 错误网关错误消息:
502 - Web 服务器在充当网关或代理服务器时收到无效响应。您要查找的页面有问题,无法显示。当 Web 服务器(作为网关或代理)联系上游内容服务器时,它收到来自内容服务器的无效响应。
我在 Azure 应用程序洞察中看到的错误:
Microsoft.AspNetCore.Connections.ConnectionResetException:客户端已断开连接 <--- 尝试对不存在的网络连接进行操作。(来自 HRESULT 的异常:0x800704CD)
尝试上传 2GB 测试文件时发生这种情况。使用 1GB 文件它可以正常工作,但它需要工作到大约 5GB。
我使用块写入方法优化了将文件流写入 azure blob 存储的部分(归功于:https : //www.red-gate.com/simple-talk/cloud/platform-as-a-service /azure-blob-storage-part-4-uploading-large-blobs/)但对我来说看起来连接正在关闭到客户端(在这种情况下是邮递员),因为这似乎是单个 HTTP POST 请求并且底层 Azure 网络堆栈(例如负载平衡器)正在关闭连接,因为它需要很长时间,直到我的 API 为 HTTP POST 请求提供 HTTP 200 OK。
我的假设正确吗?如果是,如何实现从我的前端(或邮递员)上传的数据块(例如 15MB)然后可以通过 API 以比整个 2GB 更快的方式确认?即使创建一个 SAS URL 用于上传到 azure blob 并将 URL 返回到浏览器也可以,但不确定我如何轻松集成 - 还有最大块大小 afaik,所以对于 2GB,我可能需要创建多个块。如果这是建议,那么在这里获得一个好的样品会很棒,但也欢迎其他想法!
这是我在 C# .Net Core 2.2 中的 API 控制器端点中的相关部分:
[AllowAnonymous]
[HttpPost("DoPost")] …Run Code Online (Sandbox Code Playgroud)