【问题标题】:Grails 3 - get asset path in serviceGrails 3 - 获取服务中的资产路径
【发布时间】:2016-07-27 06:05:40
【问题描述】:

我需要在 Grails 3 服务中获取位于 assets/schemas/resource.json 的静态资源的路径。

目前定义为

private final String SCHEMA = 'grails-app/assets/schemas/resource.json',

这对于development 环境很好,但当然不适用于生产环境(因为它位于<app_root>/assets/resource.json

我试图搜索如何在我的案例中利用资产管道,但到目前为止我真的不知道:P

提前致谢!

【问题讨论】:

    标签: grails asset-pipeline grails-3.0 grails-services


    【解决方案1】:

    文档中对此进行了介绍。 http://bertramdev.github.io/grails-asset-pipeline/guide/usage.html

    在控制器或服务中,注入assetResourceLocator 并使用assetResourceLocator.findAssetForURI()

    【讨论】:

    • 你是对的 :) 我的问题的解决方案是 assetResourceLocator.findAssetForURI('schemas/resource.json').getURI()(或者 .getURL()),但我后来决定将我的 json 文件放在 src/main/resources 中,因为我真的没有'不需要将其作为资产进行管理,而是作为一种简单的资源。
    【解决方案2】:

    它在本地工作,但在部署到服务器时不能。使用 Grails 3.1.0、Java 1.8.0_91 和 Tomcat 8.0.33。

    assetResourceLocator?.findAssetForURI('myFolder/placeholder.jpg')?.byteArray
    

    返回

    groovy.lang.MissingPropertyException: No such property: byteArray for class: org.springframework.web.context.support.ServletContextResource

    编辑:解决了:

    assetResourceLocator?.findAssetForURI('myFolder/placeholder.jpg')?.getInputStream()?.bytes
    

    【讨论】:

    • 谢谢,我遇到了同样的问题(在开发中工作,但不是在生产中)。这个解决方案在 grails 2.4.5 中也适用于我!
    • 这里的输入流需要关闭吗?
    【解决方案3】:

    完整示例:

    class ExampleService {
      def assetResourceLocator
    
      def someMethod() {
        Resource res = assetResourceLocator.findAssetForURI('test.css')
        String url = res.getURL()
        String uri = res.getURI()
      }
    }
    

    来源:http://bertramdev.github.io/grails-asset-pipeline/guide/usage.html

    【讨论】:

      猜你喜欢
      • 2016-03-05
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2012-07-19
      • 2016-08-10
      • 2023-03-15
      相关资源
      最近更新 更多