我玩框架版本2.46并且我将文件上传到我的亚马逊S3帐户,但是我一直在获取tmp文件的路径。这是我的代码
.tickLabels .xAxis {
color:transparent !important;
}
给我提出问题的部分是 myfile.getAbsolutePath 部分,它返回一个未找到的错误文件。我确切知道为什么,但不知道如何解决它,例如,如果我在 C:\ mypictures \ Users \ bus.jp g有一个文件,那么 myfile.getAbsolutePath 会把它变成 C:\ mypictures \ Calc \ bus.jpg 。我的PlayFramework应用程序名为Calc和offcourse,该位置不存在该图片。
如何修复此问题以便上传正确的文件位置?我被困在这里几个小时
答案 0 :(得分:1)
您似乎正在寻找Web应用程序从您计算机上的该位置提取文件,而不是在HTTP请求中接收文件。
val myfile:File= new File(file.filename)
将不起作用,因为您正在获取上传文件的名称(而不是路径),并使用该名称和当前工作目录创建File
- 这是当你用它来获取绝对目录时反映出来。
也不需要它,因为您已经拥有TemporaryFile
。来自documentation:
def upload = Action(parse.multipartFormData) { request =>
request.body.file("picture").map { picture =>
import java.io.File
val filename = picture.filename
val contentType = picture.contentType
picture.ref.moveTo(new File(s"/tmp/picture/$filename"))
Ok("File uploaded")
}.getOrElse {
Redirect(routes.Application.index).flashing(
"error" -> "Missing file")
}
}
因此,您可以使用该临时文件为您提供所需的一切。然后你的代码变成
def upload = Action (parse.multipartFormData) { implicit request =>
request.body.file("file").map { file =>
val credentials: AWSCredentials = new BasicAWSCredentials("Key", "Secret-key")
val s3client: AmazonS3 = new AmazonS3Client(credentials)
val bucketName: String = "myfolder"
s3client.putObject(new PutObjectRequest(bucketName,
file.filename,
file.ref.file))
Ok("File uploaded")
}.getOrElse {
Redirect(routes.Application.index).flashing(
"error" -> "Missing file")
}
}