TMP文件的默认路径是什么?例如,将文件上传到服务器后,PlayFramework将它们放在TMP文件夹中。哪个文件夹使用PlayFramework?我找不到任何文档。如果我知道此TMP文件夹路径,那么我可以使用它来检索TMP文件。我正在使用PlayFramework 2.6版本。
edit :添加scala
标签
默认情况下播放使用一个名为 play.api.libs.Files.DefaultTemporaryFileCreator
的类来创建其文件。该类使用java.nio.file.Files.createTempDirectory("playtemp")
创建其临时目录。我认为您无法轻易获得此目录的位置。
您可以覆盖TemporaryFileCreator
,并使用依赖注入(Java,Scala)注入您自己的实现。
如果您只想访问已上传的文件,则无论如何,您确实可以访问基础临时文件。在Java API中,只需致电MultipartFormData.getFiles
;在Scala API中调用MultipartFormData.file("name")
。这些电话将为您提供FilePart
。在Java中,File
存储在FilePart
的file
字段中;在Scala中,它在ref
属性中。
对于那些想知道如何覆盖 DefaultTemporaryFileCreator
的人,binded binded to play的特质 TemporaryFileCreator
。
创建自己的实现
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
}
}
创建自己的应用程序模块,扩展了Play提供的内置模块。
您将需要过滤要替换的建筑物绑定,然后添加覆盖,否则将有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"
使用Java java.nio.file.Files.createTempFile
方法
// Inside a Scala worksheet
import java.nio.file.Files
import java.io.File
val sampleFile: File = Files.createTempFile("sample", ".txt").toFile
println(sampleFile.getPath)
打印文件的path
在MacOS上显示了这一点:
/var/folders/jp/1sslmypy5thyn7wv8lfq1s3c0000gq/T/sample6927805051598358327.txt
这可能是应用程序的每个运行的不同目录。
因此,如果在运行时需要完整的路径,则getPath
是获得它的可行选择。