使用带有Scala的java.io.FileInputStream将文件从Play webapp上载到另一个网站
在我的控制器中,我定义了一个上传方法,该方法应该是通过我的网站将一个文件从用户上传到第三方网站(如Dropbox或Box.com)。我受到JavaApi的限制(为此我编写了一个包装器)。我必须给它一个java.io.FileInputStream,但我不知道如何给它 方法如下:使用带有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 =>
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”在控制器中!经典!所以你的代码工作正常,让我感到惭愧,因为它很短很简单。非常感谢!让我开心!你的最后两句话也让我开心!:)