0

有这样的路线:

GET /assets/*file controllers.Assets.at(path="/public", file)

当我在 public/images/pictures/ 中添加一些图像时,我想用这个 url 访问它们http://localhost:9000/assets/images/pictures/test.jpg

它在服务器处于开发模式时工作,但在生产中我每次添加图像时都必须重新启动它......

我怎么能绕过它?

问候。

4

2 回答 2

3

Play 的静态资产控制器将文件从类路径中提取出来,并且不适合动态使用。如果您需要使用动态资产,那么您将需要编写自己的控制器来处理它。

于 2013-07-25T05:57:28.723 回答
2

正如 James 所提到的,Play 的静态资源控制器将文件从类路径中拉出。您还可以定义应用程序外部的类路径。

您可以通过在构建文件中定义以下行来做到这一点。

val assetDir = sys.props.get("java.io.tmpdir").get + "/outside-cp"

val main = play.Project(appName, appVersion, appDependencies).settings(
  unmanagedClasspath in Runtime += file(assetDir),
  unmanagedClasspath in Compile += file(assetDir),
  unmanagedClasspath in Test += file(assetDir)

)

现在创建以下目录:

/tmp/outside-cp/assets

最后,为您的外部资产创建一条路线:

GET /outside/*file   controllers.Assets.at(path="/assets", file)

启动您的应用程序并在资产目录中放置一个文件。现在您可以通过以下 URL 访问该文件:

http://localhost:9000/outside/your-placed.file

注意:您不能直接将资产目录用作类路径,因为 Play 的资产控制器会自动为给定文件添加路径前缀。并且定义空路径不起作用。

如果您运行play stage以打包您的应用程序,那么您必须更改您的启动脚本以将类路径添加到您的应用程序。

于 2013-07-25T10:58:42.703 回答