我有作爲BLOB存儲在數據庫中的圖像。現在我可以使用Richfaces mediaOutput標籤在我的jsf頁面中顯示它們。如何在JSF中顯示來自數據庫的圖像
當圖像存儲在數據庫中時,圖像是否可能具有類似「/images/image.jpg」的路徑?
在尋找一個答案,我來到身邊這樣的事:
@GET
@Path("/files/{filename}")
@Produces(MediaType.WILDCARD)
最好的問候, 伊利亞Sidorovich
我有作爲BLOB存儲在數據庫中的圖像。現在我可以使用Richfaces mediaOutput標籤在我的jsf頁面中顯示它們。如何在JSF中顯示來自數據庫的圖像
當圖像存儲在數據庫中時,圖像是否可能具有類似「/images/image.jpg」的路徑?
在尋找一個答案,我來到身邊這樣的事:
@GET
@Path("/files/{filename}")
@Produces(MediaType.WILDCARD)
最好的問候, 伊利亞Sidorovich
你可以一個servlet拿起每個請求寫入/image/*
或適合你的東西。 而在您的servlet中,您可以通過請求參數從數據庫中檢索正確的數據。 你通過
response.getOutputStream().write(content);
(含量爲你的ByteArray圖像)
寫出來的數據謝謝羅埃爾和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) {}
}
}
}