2013-04-05 134 views
0

我正在尝试做一个Grails webapp,现在我试图在文件夹中显示所有图像。grails在文件夹中显示图像

为了做到这一点,我有以下:

def display(){ 
     def dir = new File("/tmp/images") 
     def list = [] 
     dir.eachFileRecurse() { file -> 
      def avatarFilePath = new File(file.path) 
      response.setContentType("application/jpg") 
      OutputStream out = response.getOutputStream(); 
      out.write(avatarFilePath.bytes); 
      out.close(); 
     } 
    } 

因此,使用上面的代码,我使用显示一个图像:

<img class="thumbnail" src='${createLink(controller: "images", action: "display")}' /> 

使用此代码,我显示一个图像。 如何显示该文件夹中的所有图像? 我是否需要建立一个列表?什么?输出流列表? 在这种情况下,我应该把什么放在我的gsp文件?

回答

4

如果图像文件夹位于应用程序结构中,您可以直接创建指向图像的链接。在这种情况下,我认为你需要一个输出一个文件内容的控制器动作,以及另一个获取图像列表并请求文件内容的动作。

class MyController { 
    private static final File IMAGES_DIR = new File('/tmp/images') 

    //get the list of files, to create links in the view 
    def listImages() { 
    [images: IMAGES_DIR.listFiles()] 
    } 
    //get the content of a image 
    def displayImage() { 
    File image = new File(IMAGES_DIR.getAbsoluteFilePath() + File.separator + params.img) 
    if(!image.exists()) { 
     response.status = 404 
    } else { 
     response.setContentType("application/jpg") 
     OutputStream out = response.getOutputStream(); 
     out.write(avatarFilePath.bytes); 
     out.close(); 
    } 
    } 

} 

和你的GSP可以做类似

<g:each in="${images}" var="img"> 
    <img class="thumbnail" src='${createLink(controller: "myController", action: "displayImage", params:[img: img.name])}' /> 
</g:each> 

P.S:代码不进行测试,可能需要一些调整。

+0

听起来不错,但我看不到你在哪里建立图像列表。 – itsme 2013-04-05 21:04:26

+0

'IMAGES_DIR.listFiles()'返回图像列表。 – 2013-04-05 21:07:39

+0

感谢您的答案,但我看不到从gsp页面listImages()和图像()和img之间的链接。你能解释一下吗?谢谢。 – itsme 2013-04-05 21:21:23

相关问题