tmp文件的默认路径是什么?例如,在将文件上传到服务器之后,playframework将它们放到tmp文件夹中。哪个文件夹使用playframework?我找不到任何文件。如果我知道这个tmp文件夹路径,那么我可以用它来检索tmp文件。 我正在使用playframework 2.6版本。
修改:添加了scala
代码
答案 0 :(得分:3)
默认情况下,Play使用名为play.api.libs.Files.DefaultTemporaryFileCreator
的类来创建其文件。该类使用java.nio.file.Files.createTempDirectory("playtemp")
创建其临时目录。我不认为你可以很容易地获得这个目录的位置。
您可以通过使用依赖注入(Java,Scala)覆盖TemporaryFileCreator
并提供自己的逻辑来注入您自己的实现。
如果您只想访问上传的文件,那么无论如何您都可以在请求期间访问底层临时文件。在Java API中,只需调用MultipartFormData.getFiles
;在Scala API调用MultipartFormData.file("name")
中。这些来电会给你一个FilePart
。在Java中,File
存储在FilePart
' file
字段中;在Scala中,它位于ref
属性中。
答案 1 :(得分:0)
对于那些想知道如何覆盖DefaultTemporaryFileCreator
绑定到特征TemporaryFileCreator
Play的人来说。
package modules
import java.io.File
import javax.inject.{ Inject, Singleton }
import play.api.inject.ApplicationLifecycle
import play.api.libs.Files.DefaultTemporaryFileCreator
@Singleton
class CustomTemporaryFileCreator @Inject() (applicationLifecycle: ApplicationLifecycle)
extends DefaultTemporaryFileCreator(applicationLifecycle) {
override def create(prefix: String, suffix: String): File = {
val file = super.create(prefix, suffix)
file.setReadable(true, false)
file
}
}
您需要过滤要替换的内置绑定,然后添加覆盖,否则将有2个绑定用于相同的特征,并且注入器会抱怨。
package modules
import play.api.{Configuration, Environment}
import play.api.inject.{Binding, BuiltinModule}
import play.api.libs.Files
class MyAppModule extends BuiltinModule {
override def bindings(env: Environment, configuration: Configuration): Seq[Binding[_]] = {
val overrides = List(
bind[Files.TemporaryFileCreator].to[CustomTemporaryFileCreator]
)
def isOverride(binding: Binding[_]): Boolean = overrides.exists(_.key.clazz == binding.key.clazz)
overrides ++ super.bindings(env,configuration).filterNot(isOverride)
}
}
play.modules.disabled += "play.api.inject.BuiltinModule"
play.modules.enabled += "modules.MyAppModule"