7

在 Grails 3.0 中,如何将 URL 映射到文件夹下的assets文件?

例如:
http://localhost:8080/favicon.ico-->grails-app/assets/images/bookmark.ico

我尝试了一些测试映射,例如:

grails-app/controllers/UrlMappings.groovy

class UrlMappings {

   static mappings = {
      ...
      "/t1.png"  (uri: "/assets/images/test.png")
      "/t2.png"  (uri: "/assets/test.png")
      "/t3.png"  (uri: "/images/test.png")
      "/t4.png"  (dir: "assets/images", file: "test.png")
      ...
      }

}

...但它们都会导致 500 服务器错误。

4

3 回答 3

0

我认为您需要将 URL 映射到 Asset Plugin 的 AssetController,如下所示(未测试):

class UrlMappings {
    static mappings = {

    ...

    "/files/$id"  (controller :"AssetController", action:"index") 
       ...
    }
}

高温高压

于 2015-07-16T05:59:48.157 回答
0

如果您不使用 Asset-Pipeline,您可以按照Grails 文档中列出的步骤将静态资源映射到 URL 。但是,您的问题是询问如何使用Asset-Pipeline 插件将单个资源映射到单个 URL 。

几年前,Burt Beckwith 在Grails 论坛上提供了关于 Grail 在提供静态资源方面的作用的见解。

Grails 不提供静态资源,容器提供。因此,无法直接配置映射 - 您需要通过控制器提供服务,或者按照 Eric 的建议配置代理。

伯特

这个答案可能不令人满意。但是,如果您必须提供静态资源并且绝对不想使用控制器或代理,您可以尝试以下方法。

创建一个名为 image.gsp 的视图。该视图将仅包含一个资产标签。使用上面的示例,

<asset:image src="t1.png"/>

然后配置您的 URL 映射以指向该image.gsp页面。

class UrlMappings {

   static mappings = {
      ...
      "/t1.png"  (view: "image")
      ...
      }

}

我认识到这可能不是您希望使用的确切方法。但我认为了解 Grails 与运行 Grails 的容器所扮演的角色将有助于做出正确为用户提供资源的决定。

我知道这可能看起来无关,但是如果您想创建一个列出目录内容的页面,请查看CodePanda 的这篇文章。他的代码可以用作模板来创建一个控制器来服务单个文件,他解释了如何更新视图、控制器和 groovy.config。

于 2015-07-27T14:46:12.030 回答
-1

使用"/favicon.ico"(uri: "/assets/favicon.ico")对我有用。

从概念上讲,Asset Pipeline 似乎将资产扁平化(因此您不需要为指定images, javascripts, )stylesheetsuri

Grails:3.2.11 资产管道:2.14.6

于 2018-05-22T17:10:24.593 回答