实现 RESTful 大文件上传的正确方法
我已经制作REST API一段时间了,我仍然纠结于一个案例 - 大文件上传。我读过其他一些API,如Google Drive,Twitter和其他文献,我有两个想法,但我不确定它们中的任何一个是否“正确”。正如在适当的时候,我的意思是它在某种程度上是标准化的,不需要太多的客户端逻辑(因为其他各方将实现该客户端),或者更好的是,它可以很容易地用cURL调用。计划是在Java中实现它,最好是Play Framework。
显然,我需要一些文件分区和服务器端缓冲机制,因为文件很大。
因此,我得到的第一个解决方案是分段上传()。我是这样理解的,我以前也像这样实现过它,但是对我来说,在客户端实际模拟表单总是很奇怪,特别是因为客户端必须设置文件键名称,而根据我的经验,这是客户端有点忘记或不理解的东西。另外,如何规定块大小/部分大小?是什么阻止客户端将整个文件放在一个块中?multipart/form-data
解决方案二,至少我理解的,但没有找到实际的实现实现是“常规”POST请求可以工作。内容应分块,数据在服务器端缓冲。但是,我不确定这是否是一个正确的理解。数据实际上是如何分块的,上传是跨越多个HTTP请求还是在TCP级别分块?什么是?Content-Type
底线,这两者(或其他任何东西?)应该是一种客户端友好,广泛可理解的实现REST API以进行文件上传的方式吗?