如何从目录显示图像?

问题描述:

我所知,我们总是从assets/image文件夹 diplay一个形象的比方这样的..如何从目录显示图像?

<asset:image src='settings.png' style="height: 20px" alt="logout"/> 

但如何,如果我的图像的文件位于根目录? 像

/home/file/images.png -->my image's file /root/tomcat8/webapp/alkd.war

homeroot文件夹是在同一水平

我使用的grails 3.1.1

我试图超过10个图像

我试图以显示更要添加一些代码到applicaiton.yml像这样..

http://www.asset-pipeline.com/manual/#configuration-2

,但我得到关于启动这个错误..

`ERROR org.springframework.boot.SpringApplication - Application startup failed 
java.io.FileNotFoundException: class path resource [assets/perpage/memberCreate-5e70ab1b20bb09d756c62afce8cb0d65.js] cannot be opened because it does not exist 
     at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172) ~[spring-core-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111] 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.metaclass.MethodMetaProperty$GetBeanMethodMetaProperty.getProperty(MethodMetaProperty.java:76) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:64) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296) ~[groovy-2.4.5.jar:2.4.5] 
     at asset.pipeline.AssetPipelineBootStrap$_closure1$_closure2.doCall(AssetPipelineBootStrap.groovy:23) ~[asset-pipeline-3.0.15.jar:na] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111] 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.Closure.call(Closure.java:426) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.Closure.call(Closure.java:442) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2030) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2015) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2068) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.dgm$164.invoke(Unknown Source) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-2.4.5.jar:2.4.5] 
     at asset.pipeline.AssetPipelineBootStrap$_closure1.doCall(AssetPipelineBootStrap.groovy:19) ~[asset-pipeline-3.0.15.jar:na] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111] 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) ~[groovy-2.4.5.jar:2.4.5] 
     at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1084) ~[groovy-2.4.5.jar:2.4.5] 
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019) ~[groovy-2.4.5.jar:2.4.5] 

您可以通过获取Tomcat的根开始,例如添加目录/文件名

def baseDir = System.getProperty('catalina.base') 
def imagesDir = "${baseDir}\webapps\myapp\images" 
+0

hmm..i不得到它。 –

+0

已更新回答,以使其更清晰 –

+0

我在'controller'中使用此代码? 如果在'assets'文件夹中,我们可以通过'abc.com/assets/34724927384.jpg' 访问它,但您的答案如何?我可能吗? –

根据official docs

从外部存储目录

资产管道服务资产可配置的素材资源复制文件到外部存储路径。这对设置您的Web服务器(例如nginx)直接提供您的静态资产很有用。为此,只需在Config.groovy环境块中定义一个配置变量即可。

environments { 
    production { 
     grails.assets.storagePath = "/full/path/to/storage" 
    } 
} 

也可以配置自定义CDN资产URL为服务这些资产:

environments { 
     production { 
      grails.assets.url = "http://s3.amazonaws.com/asset-pipe/assets/" 
     } 
    } 
+0

与此解决方案,当我重新启动我的应用程序,存储将清理或不? –

+0

嗨..我试图创建这样的... http://www.asset-pipeline.com/manual/#configuration-2 检查我的更新问题 –