【发布时间】:2020-05-12 02:48:41
【问题描述】:
我正在构建一个 .NET Core 3.1 WEB API,它将接收一个大文件(最大 500MB),如果它有效,则向客户端返回 200 响应,然后才将上传的文件上传到 Azure Blob容器。
我遇到的问题是,在我将响应返回给客户端后,请求/流正在被处理(我相信),它没有给我任何错误,也没有上传。
我尝试了一些替代方案,但都没有成功:
- Task.Run()
- 锁定流,
- 将流复制到新变量中
- 同步流,
- 带有后台队列的托管服务
文件成功上传的唯一方法是我将文件保存在本地或强制用户等待,但如果可以的话,我宁愿不这样做。
有没有人知道我该如何做到这一点?
编辑:
我使用文件上传操作在数据库上创建一个资源(并返回带有文件上传操作 ID 的 202),并根据上传到 Azure Blob 存储的成功更新它的状态。
用户可以在不同的 API 端点上检查上传状态。
我只是想知道在返回响应后是否有办法真正持久化文件流或任何对象。
【问题讨论】:
-
如果用户不等待,那么如果上传到cloid成功,你将如何与用户沟通?
-
您似乎在做两件事:1) 从用户那里下载项目。如果成功/失败,让用户知道。 2) 上传到云端。对于 1,您可以让用户等待。 2是你自己的担心。因此 1 可以是 Web API。 2 必须是其他一些自行运行并获取文件并将它们发送到云的进程。由于您是客户,因此这些故障需要您处理。
-
顺便说一句,在这种情况下,返回202 Accepted 可能更合适。
-
另外,您无需继续尝试替代方案。即使 Task.Run 工作,这也是一个糟糕的解决方案。您只需要真正了解 Web 在请求/响应模型上的工作原理,然后尝试一下。无论如何,您需要像我之前建议的那样,有一个单独的过程来上传到云端。
-
我已经编辑了原始帖子以使其更清晰。
标签: c# .net-core filestream