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

使用带有Scala的java.io.FileInputStream将文件从Play webapp上载到另一个网站,java,scala,file-upload,playframework,Java,Scala,File Upload,Playframework,在我的控制器中,我定义了一个上传方法,该方法应该是通过我的网站将一个文件从用户上传到第三方网站(如Dropbox或Box.com)。我受到JavaApi的限制(为此我编写了一个包装器)。我必须给它一个java.io.FileInputStream,但我不知道如何给它 方法如下: def upload(parentId: String) = Action.async { implicit request => authorized(request, { user =>

在我的控制器中,我定义了一个上传方法,该方法应该是通过我的网站将一个文件从用户上传到第三方网站(如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">
                }
@helper.form(action=routes.File.pseudoUpload(currentId),'enctype->“多部分/表单数据”){
}
非常感谢你的帮助

我会这样做:

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或其他任何人


有关这方面的更多信息,请参阅。

它编译并运行,这已经非常有用了。谢谢不幸的是,什么都没有发生,我也不知道为什么。我把
receivedFile.ref.moveTo(文件(“/tmp/upload”,replace=true)放进去了
作为
.map
块中要做的第一件事。然后,您可以检查
/tmp
是否存在
上载
文件及其内容。好的!我知道了。我在上面的代码中看到了一个打字错误。在表单头中,我将文件命名为“upoadThis”,并请求“uploadThis”在控制器中!经典!所以你的代码工作正常,让我感到惭愧,因为它很短很简单。非常感谢!让我开心!你的最后两句话也让我开心!:)