【发布时间】:2021-12-20 22:42:12
【问题描述】:
我正在设计一个将文件上传到服务器的系统。上传文件的请求必须通过 API 网关。该请求将是一个 REST API POST 请求,请求正文是一个文件类型的表单数据(即要上传的文件的位置)。单个文件的上传应在法定文件服务器上进行复制。例如,如果我有 3 个文件服务器,则在将文件写入至少 2 个文件服务器后,客户端应该得到成功上传的确认。实际的文件上传(数据传输)应该直接在客户端和文件服务器之间进行,而不是通过 API 网关(或路径中的任何代理服务器)。
我的解决方案 - API 网关返回要写入的文件服务器(URL)列表,客户端库协调上传并确保上传发生在法定文件服务器上。但这会创建一个包含所有编排逻辑的胖客户端,并且很难针对不同的语言进行维护。
有没有更好的方法来解决这个问题?这是如何在生产服务器中完成的?例如,AWS S3/Azure blob 存储或任何其他生产级系统必须首先将请求发送到 API 网关(或代理),它们是如何处理的?
【问题讨论】:
-
有几件事不清楚。看起来文件服务器不是从 S3 服务中提供服务的。您明确表示客户端应直接上传到文件服务器。那么这里S3的参与是什么呢?我还有其他问题,但它们确实取决于这个问题的答案,所以我会先等待答案。
-
@EthanDoh:感谢您的回复。文件将由文件服务器提供服务。此处不涉及 S3 或 Azure blob 存储。这只是关于这些服务如何处理请求的后续问题。
-
那么文件服务器有没有web server或者其他服务可以直接接收文件?
-
@EthanDoh 该文件直接从最终用户(例如笔记本电脑)接收。没有接收文件的服务。最终用户将使用 REST API 客户端(POST/PUT 请求)从笔记本电脑上传文件。
标签: amazon-s3 networking file-upload proxy api-gateway