2016-02-29 79 views
2

我有玩框架版本2.46,我上传文件到我的亚马逊S3帐户,但我不断获取tmp文件的路径。这里是我的代码PlayFramework我怎样才能得到正确的文件路径上传

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" 

    val myfile:File= new File(file.filename) 

     s3client.putObject(new PutObjectRequest(bucketName,file.filename,new File(myfile.getAbsolutePath))) 
     Ok("File uploaded") 
     }.getOrElse { 
     Redirect(routes.Application.index).flashing(
     "error" -> "Missing file") 
    } 
    } 

这是给我的问题是myfile.getAbsolutePath部分它返回未找到错误文件的一部分。我知道确切的原因,但不知道如何解决它,例如,如果我有一个文件在C:\ mypictures \ Users \ bus.j克然后myfile.getAbsolutePath将它变成C:\ mypictures \ Calc \ bus.jpg。我的PlayFramework应用程序被命名为Calc和offcourse,该图片在该位置不存在。

  • 工程:新建文件( “C:\ mypictures \用户\ bus.jpg”)= C:\ mypictures \用户\ bus.jpg
  • 不工作的新文件(myfile.getAbsolutePath)= C :\ mypictures \ Calc \ bus.jpg

我该如何解决这个问题,以便上传正确的文件位置?我被困在这个几个小时

回答

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") 
    } 
} 
+1

完美的非常感谢,解决了我的问题!欣赏它。 – user1591668

相关问题