2015-05-02 60 views
0

我在eclipse中的資源文件夾下有一個名爲images的圖像文件夾。 而我在圖像文件夾中有多個圖像。 我想通過調用Web服務在瀏覽器中顯示所有圖像。 我已經嘗試了下面的代碼。我能夠只檢索一個圖像。我想要這個多個圖像。我該怎麼做?在java中寫入多個圖像到輸出流

ClassLoader classLoader = getClass().getClassLoader(); 
File file = new File(classLoader.getResource("images/").getPath()); 

      final String[] EXTENSIONS = new String[]{ 
        "png","jpg"// and other formats you need 
      }; 
      // filter to identify images based on their extensions 
      final FilenameFilter IMAGE_FILTER = new FilenameFilter() 
      { 

       @Override 
       public boolean accept(final File dir, final String name) { 
        for (final String ext : EXTENSIONS) { 
         if (name.endsWith("." + ext)) { 
          return (true); 
         } 
        } 
        return (false); 
       } 
      }; 
      if (file.isDirectory()) 
      { 
       //list of files I get 
       for (final File fi : file.listFiles(IMAGE_FILTER)) 
       { 
        OutputStream out =null; 
        OutputStream out1 =null; 
        BufferedImage bi =null; 
        try 
        { 
         System.out.println("file" +fi); 
         //I get different files from images folder and add that to bufferedImage. 
         bi= ImageIO.read(fi); 

         response.setContentType("image/jpeg"); 
         out= response.getOutputStream(); 
         ImageIO.write(bi, "png", out); 
         ImageIO.write(bi, "jpg", out); 
         out.close(); 
        } 
        catch (final IOException e) 
        { 
         // handle errors here 
         e.printStackTrace(); 
        } 
       } 
      } 
+1

這可能是因爲你在每次迭代中關閉響應輸出流? 'out.close()'。你能移動這個語句來最終阻止你的循環並嘗試嗎? –

+0

@AniketThakur我已經嘗試過,但仍然是同樣的問題。 –

+0

如果你想讓它在普通的網頁瀏覽器中工作,你的方法將無法工作。只是因爲瀏覽器期望每個請求/響應一個圖像。您需要創建一個服務/資源來創建所有文件的列表(即帶有多個IMG標籤的HTML響應),然後再創建一次處理一個圖像的另一個服務,以便從HTML中轉換路徑或其他標識符到文件位於服務器上的路徑(大多數Web服務器已經完成了這些操作)。 – haraldK

回答

0

資源不是文件。不能保證它們甚至會存在於文件系統中,只存在於JAR或WAR文件中。所以使用File方法不會起作用。

在任何情況下,只是序列化圖像流到瀏覽器也無法正常工作。您應該生成一個包含<img>元素的HTML頁面,其中包含圖像的URL,並組織這些URL可以下載。可能使用資源機制首先不合適。