【发布时间】:2016-02-26 15:26:39
【问题描述】:
我制作 REST API 已经有一段时间了,但我仍然对一种情况感到困扰 - 大文件上传。我已经阅读了其他一些 API,例如 Google Drive、Twitter 和其他文献,我有两个想法,但我不确定它们中的任何一个是否“正确”。正如正确的那样,我的意思是它有点标准化,不需要太多的客户端逻辑(因为其他方将实现该客户端),或者更好的是,它可以很容易地用 cURL 调用。计划是在 Java 中实现它,最好是 Play Framework。
显然我需要一些文件分区和服务器端缓冲机制,因为文件很大。
所以,我得到的第一个解决方案是分段上传 (multipart/form-data)。我是这样实现的,我以前也这样实现过,但是在客户端实际模拟一个表单对我来说总是很奇怪,特别是因为客户端必须设置文件键名,根据我的经验,这是客户有点忘记或不理解。另外,块大小/部分大小是如何规定的?是什么阻止了客户端将整个文件放在一个块中?
解决方案二,至少我所理解的,但没有找到实际的实现实现是“常规” POST 请求可以工作。内容应该被分块并且数据在服务器端被缓冲。但是,我不确定这是一个正确的理解。数据实际上是如何分块的,上传是跨越多个 HTTP 请求还是在 TCP 级别上分块? Content-Type 是什么?
最重要的是,这两个(或其他什么?)应该是一种客户端友好、易于理解的实现文件上传 REST API 的方式?
【问题讨论】:
-
我建议复制 YouTube resumable upload protocol。他们每天使用这种格式处理令人费解的数据量,所以我认为它运作良好。
标签: java file rest curl file-upload