2012-02-20 74 views
3

我有作爲BLOB存儲在數據庫中的圖像。現在我可以使用Richfaces mediaOutput標籤在我的jsf頁面中顯示它們。如何在JSF中顯示來自數據庫的圖像

當圖像存儲在數據庫中時,圖像是否可能具有類似「/images/image.jpg」的路徑?

在尋找一個答案,我來到身邊這樣的事:

@GET 
@Path("/files/{filename}") 
@Produces(MediaType.WILDCARD) 

最好的問候, 伊利亞Sidorovich

回答

4

你可以一個servlet拿起每個請求寫入/image/*或適合你的東西。 而在您的servlet中,您可以通過請求參數從數據庫中檢索正確的數據。 你通過

response.getOutputStream().write(content); 

(含量爲你的ByteArray圖像)

1

寫出來的數據謝謝羅埃爾和BalusC!

如果有人遇到這個問題,這裏是你可以做的。

package org.gicm.test; 
import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.inject.Inject; 
import java.io.BufferedOutputStream; 
import java.io.BufferedInputStream; 
import org.gicm.cms.CMSDao; 
import org.gicm.model.UploadedImage; 

@WebServlet("/images/*") 
public class TestServlet extends HttpServlet { 

    @Inject 
    private CMSDao cms; 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String imageId = String.valueOf(request.getPathInfo().substring(1)); // Gets string that goes after "/images/". 
     UploadedImage image = cms.findImage(imageId); // Get Image from DB. 

     response.setHeader("Content-Type", getServletContext().getMimeType(image.getName())); 
     response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\""); 

     BufferedInputStream input = null; 
     BufferedOutputStream output = null; 

     try { 
      input = new BufferedInputStream(image.getData()); // Creates buffered input stream. 
      output = new BufferedOutputStream(response.getOutputStream()); 
      byte[] buffer = new byte[8192]; 
      for (int length = 0; (length = input.read(buffer)) > 0;) { 
       output.write(buffer, 0, length); 
      } 
     } finally { 
      if (output != null) try { output.close(); } catch (IOException logOrIgnore) {} 
      if (input != null) try { input.close(); } catch (IOException logOrIgnore) {} 
     } 
    } 
} 
相關問題