java - Play框架文件上传无此类文件异常

标签 java scala ubuntu intellij-idea playframework-2.0

我正在尝试使用 play 框架 scala 来实现文件上传。此代码在开发(Windows)中运行良好,但在部署(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 目录时,我没有看到 Play 临时文件。 我正在 intellij 中使用 play 2.5。

最佳答案

首先,尝试提供完整路径而不是文件,例如/var/webapps/your-app/files

root 临时 身份运行应用程序(使用 sudo)并确保 Files (/var/webapps/your-app/files ) 文件夹存在于磁盘上。

如果应用程序以 root 身份运行,则表明权限存在问题。确保运行应用程序的用户具有对 /tmp 的读/写访问权限以及对 Files 的写访问权限。

关于java - Play框架文件上传无此类文件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41917834/

相关文章:

scala - 使用 Source.fromResource 从文件读取时处理 NullPointerException

linux - 找不到模块/build/Debug/iconv.node

java - 在获取 facebook 数据时,它会抛出 facebook 网络异常和 java.net.MalformedURLException : no protocol: me/feed?

java - 如何写 "generic wrapper class"? java

java - 交易中止

java - SOAP 请求 : Illegal Protocol https for HTTP URLConnection Factory

scala - 如何解析 Scala 中的 future 列表

templates - Scala Play Framework中的导入语句不起作用

python - 导入错误 : TensorBoard

python - 如何使这个小小的 Python 2.7 复数代码片段与 Python 3 一样工作?