通过多个播放应用程序转发MultiPart文件上载请求

时间:2015-02-10 07:30:38

标签: java json file-upload playframework websocket

我有两个Play应用程序(比如A和B)和一个浏览器客户端(C)。目的是使用multipart/form-data从客户端C通过A向B发送文件和一些json数据。因此,该过程是 C - > A - >乙

从客户端,数据以多部分的形式出现,标题为 -

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryWnmuXaBXoBUSKF92

我的请求有效负载看起来像 -

------WebKitFormBoundaryWnmuXaBXoBUSKF92
Content-Disposition: form-data; name="data"

{"abc": 1, "bcd": 2, "xyz": 3}
------WebKitFormBoundaryWnmuXaBXoBUSKF92
Content-Disposition: form-data; name="file"; filename="test3.csv"
Content-Type: text/csv


------WebKitFormBoundaryWnmuXaBXoBUSKF92--

因此,我将json和文件一起发送到一个 POST 请求中。

现在,我希望在浏览Play应用 A 后将此内容转发到Play应用 B

我尝试了三种方法 -

  1. 使用MultipartFormData解析 A 上的multipart / form-data,并取出Filejson。在这种方法中,我正在尝试重新生成Play App B 的请求。现在我被困在转发部分。我读了this,但我不知道如何将它与文件一起使用。需要帮助。
  2. 我尝试使用websocket的第二种方法。这是将文件作为bytestream发送,修复帧大小并在发送之前对文件进行切片。这里我遇到的问题是保持帧同步,因为send()是异步的。我尝试实现一个解决方案,当服务器收到一个文件块时,服务器发送ACK,直到eof为止。这种方法可行,但我不确定它是否是最佳解决方案。
  3. 可能有基于流的解决方案。但我不知道如何在Java中实现它(纯粹!)。 Play Docs没有提供太多帮助。这种方法比第一种方法更好,因为它会阻止我们将文件作为临时文件下载,并且会更快。
  4. 我想知道解决这个问题的最佳方法是什么。欢迎任何其他方式!

    我正在使用Play 2.3.6(Java)。很抱歉长时间阅读。

0 个答案:

没有答案