所以,在playframework中,我可以回传任何响应,所以当我收到json请求时,我可以进行http分块并将响应流回来进行一些非常大的响应。我想知道是否可以在POST调用上完成相同的操作。如果客户端有非常大的POST呼叫,他们可以将请求流式传输给我吗?这可能用html吗?
那就是说,如果我不能这样做,我需要一个卷曲或其他非浏览器客户端用来上传文件的api(json请求,或csv等)。如何创建这样的api?
我应该注意,我不能立刻收到整个请求或者内存不足。我需要收到碎片,并且当我收到碎片时,将它一次放入后端数据存储区。
此外,什么是卷曲语法,以确保它是流式传输文件,而不是在一个巨大的巨大请求中发送它会破坏服务器?如何强制客户端流式传输文件?
感谢, 迪安
答案 0 :(得分:0)
您可以使用EssentialAction完全控制HTTP请求处理。 EssentialAction处理请求主体并返回结果。
正常游戏Action是EssentialAction的一个特例。操作处理请求主体并返回结果,但它们总是分两步执行处理。操作首先解析请求正文。然后,Actions将解析后的值解析为函数以获取Result。对您而言,单独的解析步骤是一个问题,因为这意味着解析的值需要存储在内存中。
如果使用EssentialAction,则可以避免在内存中存储已解析的值,因为您可以在请求体到达时处理它。
您需要做的是向控制器添加一个返回EssentialAction的方法。
EssentialAction的签名是:
trait EssentialAction extends (RequestHeader) ⇒ Iteratee[Array[Byte], SimpleResult]
EssentialAction需要接受请求标头,然后返回一个迭代来处理请求主体。迭代器将在请求体到达时递增地处理它。您可以使用您的iteratee在每件作品到货时将每件作品放入您的数据存储中。当您完成所有部分的处理后,您可以返回结果。
此处有更多信息:http://www.playframework.com/documentation/2.2.x/HttpApi。