2016-02-29 66 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

相關問題