【问题标题】:how to do post upload chunking(vs. download chunking)如何进行上传后分块(与下载分块)
【发布时间】:2013-04-05 13:27:16
【问题描述】:

所以,在 playframework 中,我可以将任何响应流式传输回来,因此当我收到 json 请求时,我可以进行 http 分块并将响应流式传输回一些非常大的响应。我想知道是否可以在 POST 调用上执行相同的操作。如果客户有一个非常非常大的 POST 调用,他们可以向我发送请求吗?用 html 可以吗?

也就是说,如果我不能这样做,我需要一个 api,curl 或其他一些非浏览器客户端将使用它来上传文件(json 请求或 csv 等)。如何创建这样的api?

我应该注意,我不能一次收到整个请求,否则会内存不足。我需要接收片段,当我收到片段时,一次将其放入后端数据存储区。

另外,什么是 curl 语法来确保它正在流式传输文件,而不是在一个会破坏服务器的巨大请求中发送它?如何强制客户端流式传输文件?

谢谢, 院长

【问题讨论】:

    标签: html playframework


    【解决方案1】:

    您可以使用EssentialAction 完全控制 HTTP 请求处理。 EssentialAction 处理请求正文并返回结果。

    Normal Play Actions 是 EssentialAction 的一个特例。 Actions 处理请求正文并返回结果,但它们总是分两步执行它们的处理。操作首先解析请求正文。然后Actions将解析后的值解析为一个函数,得到一个Result。对你来说,有一个单独的解析步骤是个问题,因为这意味着解析后的值需要存储在内存中。

    如果您使用 EssentialAction,那么您可以避免将解析后的值存储在内存中,因为您可以在请求正文到达时对其进行处理。

    您需要做的是向控制器添加一个返回 EssentialAction 的方法。

    EssentialAction 的签名是:

    trait EssentialAction extends (RequestHeader) ⇒ Iteratee[Array[Byte], SimpleResult] 
    

    EssentialAction 需要接受请求头,然后返回一个 iteratee 来处理请求体。 iteratee 将在请求主体到达时增量处理它。您可以使用 iteratee 在每件到达时将每件放入您的数据存储中。处理完所有部分后,您可以返回一个结果。

    更多信息在这里:http://www.playframework.com/documentation/2.2.x/HttpApi

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2012-06-29
      • 2017-07-22
      • 1970-01-01
      • 2018-10-28
      • 2014-02-25
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多