使用 java.io.FileInputStream 和 Scala 将文件从 Play webapp 上传到另一个网站

Upload a file from Play webapp to another website using java.io.FileInputStream with Scala

在我的控制器中,我定义了一个上传方法,该方法应该流式传输用户通过我的网站上传到第三方网站(如 Dropbox 或 Box.com)的文件。我受到 JavaApi 的限制(我为此编写了一个包装器)。我必须给它一个 java.io.FileInputStream 但我不知道如何。

这是方法:

def upload(parentId: String) = Action.async { implicit request =>
    authorized(request, { user =>
      val body = request.body.asMultipartFormData

      // somehow i have to transform the body from request to a FileInputStream

      val stream: FileInputStream = new FileInputStream(file)

      ApiJava.pseudoUpload(user.token, parentId, stream);
      Redirect(routes.Application.showFolder(parentId))
    })
  }

请求按标准发送

@helper.form(action = routes.File.pseudoUpload(currentId), 'enctype -> "multipart/form-data") {
                <input type="file" name="upoadThis">
                <input type="submit">
                }

非常感谢您的帮助!

我会这样做:

def upload(parentId: String) = Action.async(parse.multipartFormData) { implicit request =>
    authorized(request, { user =>
      request.body.file("upoadThis").map { uploadThis =>
        new FileInputStream(receivedFile.ref.file)
        ...

在将文件流式传输到 Dropbox 或其他任何人之前,将文件临时存储到磁盘。

有关详细信息,请参阅 documentation