因此,在playframework中,我可以流式传输任何响应,因此当我收到json请求时,我可以进行http分块,并为一些非常非常大的响应流式传输响应。用html能做到这一点吗?
也就是说,如果我不能做到这一点,我需要一个api,curl或其他非浏览器客户端将使用它来上传文件( json请求或csv等)。如何创建这样的api?
我需要注意的是,我canNOT一次接收到整个请求,否则会出现内存不足的情况。我需要接收分片,当我接收分片时,将其一次一片地放到后端数据存储中。
另外,如何使用curl语法来确保它是在流式传输文件,而不是在一个巨大的请求中发送文件,这会导致服务器中断?如何强制客户端流式传输文件?
谢谢你,迪恩
发布于 2014-02-01 18:41:48
通过使用EssentialAction,您可以完全控制HTTP请求处理。EssentialAction处理请求正文并返回结果。
Normal Play Action是EssentialAction的一个特例。操作处理请求体并返回结果,但它们总是分两步执行处理。操作首先解析请求正文。然后,这些操作将解析后的值解析为一个函数,以获得结果。对于您来说,使用单独的解析步骤是一个问题,因为这意味着需要将解析的值存储在内存中。
如果使用EssentialAction,则可以避免将已解析的值存储在内存中,因为您可以在请求正文到达时对其进行处理。
您需要做的是向控制器添加一个返回EssentialAction的方法。
EssentialAction的签名是:
trait EssentialAction extends (RequestHeader) ⇒ Iteratee[Array[Byte], SimpleResult] EssentialAction需要接受请求头,然后返回一个迭代器来处理请求正文。当请求体到达时,迭代器将递增地处理请求体。您可以使用迭代器在每个数据块到达时将每个数据块放入数据存储中。当你处理完所有的片段后,你可以返回一个结果。
更多信息在这里:http://www.playframework.com/documentation/2.2.x/HttpApi。
https://stackoverflow.com/questions/15835209
复制相似问题