grails在文件夹中显示图像

时间:2013-04-05 19:03:15

标签: image grails gsp

我正在尝试使用Grails webapp,现在我正在尝试在文件夹中显示所有图像。

为此,我有以下内容:

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文件中?

1 个答案:

答案 0 :(得分:4)

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

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:代码未经过测试,可能需要进行一些调整。