0

我正在尝试做一个 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 文件中放入什么?

4

1 回答 1

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>

PS:代码未经测试,可能需要一些调整。

于 2013-04-05T19:30:15.377 回答