2013-04-05 140 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

相關問題