2017-01-29 10 views
2

私は再生フレームワークのスカラでファイルアップロードを実装しようとしています。このコードは開発(ウィンドウ)ではうまく動作しますが、デプロイすると失敗します(Ubuntu)。 再生フレームワークファイルにそのようなファイルの例外がありません

 def upload = Action(parse.multipartFormData) { request => 
     request.body.file("torrentFile").map { picture => 
     import java.io.File 
     val filename = picture.filename 
     val contentType = picture.contentType 
     println(filename) 
     println(contentType) 
     picture.ref.moveTo(new File("Files/ppp.rdf")) 
     Ok("File uploaded") 
    }.getOrElse { 
     Redirect(routes.Application.index()).flashing(
     "error" -> "Missing file") 
    } 
} 

この

は、私が実行しているとき

play.api.UnexpectedException: Unexpected exception[NoSuchFileException: /tmp/playtemp5801072751187159177/multipartBody5640251320440161134asTemporaryFile -> Files/ppp.rdf] 
     at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:289) ~[com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220) ~[com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) [com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.core.j.JavaGlobalSettingsAdapter.play$core$j$JavaGlobalSettingsAdapter$$super$onError(JavaGlobalSettingsAdapter.scala:35) [com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.core.j.JavaGlobalSettingsAdapter$$anonfun$onError$2.apply(JavaGlobalSettingsAdapter.scala:35) [com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.core.j.JavaGlobalSettingsAdapter$$anonfun$onError$2.apply(JavaGlobalSettingsAdapter.scala:35) [com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at scala.Option.getOrElse(Option.scala:121) [org.scala-lang.scala-library-2.11.7.jar:na] 
     at play.core.j.JavaGlobalSettingsAdapter.onError(JavaGlobalSettingsAdapter.scala:35) [com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100) [com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) [com.typesafe.play.play-netty-server_2.11-2.5.10.jar:2.5.10] 
Caused by: java.nio.file.NoSuchFileException: /tmp/playtemp5801072751187159177/multipartBody5640251320440161134asTemporaryFile -> Files/ppp.rdf 
     at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) ~[na:1.8.0_111] 
     at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) ~[na:1.8.0_111] 
     at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:457) ~[na:1.8.0_111] 
     at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262) ~[na:1.8.0_111] 
     at java.nio.file.Files.move(Files.java:1395) ~[na:1.8.0_111] 
     at play.api.libs.Files$TemporaryFile.moveTo(Files.scala:102) ~[com.typesafe.play.play_2.11-2.5.10.jar:2.5.10] 
     at controllers.Upload$$anonfun$upload$1$$anonfun$apply$1.apply(Upload.scala:74) ~[untitled10.untitled10-1.0-sans-externalized.jar:na] 
     at controllers.Upload$$anonfun$upload$1$$anonfun$apply$1.apply(Upload.scala:68) ~[untitled10.untitled10-1.0-sans-externalized.jar:na] 
     at scala.Option.map(Option.scala:146) [org.scala-lang.scala-library-2.11.7.jar:na] 
     at controllers.Upload$$anonfun$upload$1.apply(Upload.scala:68) ~[untitled10.untitled10-1.0-sans-externalized.jar:na] 

アプリケーションは、いくつかのファイルやフォルダを作成し、ファイルをアップロードしようとすると、私が取得エラーであり、これは、現在、私はそのていないLinuxのファイルパーミッションで確信しているので起こりディレクトリ。 /tmpディレクトリに移動すると再生用の一時ファイルが表示されません。 私はintellijのplay 2.5で作業しています。

答えて

1

まず、/var/webapps/your-app/filesのように、Filesの代わりに完全なパスを指定してください。

root一時的(sudoを使用して)などのアプリを実行し、Files(は/ var/webappsに/あなたのアプリ/ファイル)フォルダがディスク上に存在することを確認してください。

アプリがrootとして機能していた場合は、アクセス許可に問題があることが示されます。アプリが実行されているユーザーが/tmpに読み取り/書き込みアクセス権を持ち、Filesに書き込みアクセス権を持っていることを確認します。

+0

フルパスを指定すると問題が解決しました。乾杯!! – Eyram

関連する問題