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

时间:2015-07-07 18:34:25

标签: java scala file-upload playframework

在我的控制器中,我定义了一个方法上传,该方法上传应该通过我的网站流式传输从用户上传到第三方网站(如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">
                }

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我这样做:

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