MTU <h:graphicImage>
HTML <img>
unsuru olarak işlenen olsun. Onun src
özniteliği, ikili içeriğe değil, bir URL'ye işaret etmelidir. Bu nedenle, URL'yi (veya en az bir tanımlayıcı olarak istek parametresi veya pathinfo olarak) JSF fasulyesinde saklamanız ve görüntüyü DB'den HTTP yanıtına iletmek için ayrı bir sunucu uygulaması oluşturmalısınız. senin MTU sayfasında
bunu kullanın:
<h:graphicImage value="images/#{bean.imageId}">
bean.getImageId()
döner 123
, bu şekilde HTML olarak oluşturulmuş olsun varsayarsak:
<img src="images/123">
bir url-pattern
üzerine web.xml
eşlenmiş bir Servlet
sınıf oluşturun şöyle .:
ve
/images/*
onun
doGet()
yöntemini uygulamak
Long imageId = Long.valueOf(request.getPathInfo().substring(1)); // 123 (PS: don't forget to handle any exceptions).
Image image = imageDAO.find(imageId); // Get Image from DB.
// Image class is just a Javabean with the following properties:
// private String filename;
// private Long length;
// private InputStream content;
response.setHeader("Content-Type", getServletContext().getMimeType(image.getFilename()));
response.setHeader("Content-Length", image.getLength());
response.setHeader("Content-Disposition", "inline; filename=\"" + image.getFilename() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(image.getContent());
output = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[8192];
int length;
while ((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) {}
}
ImageDAO#find()
'da, InputStream
görüntüye veri tabanından ResultSet#getBinaryStream()
kullanabilirsiniz.
uzatılmış örnek
this article bulunabilir.
Yukarıdaki kodda atıfta bulunulan Görüntü Varlığı da 'yükseklik' ve 'genişlik' niteliklerini içermemelidir. – thejartender
@thejartender: seçiminize ücretsizdir :) Ancak bu bağlamda sadece yararsızdır. Gerekli ' 'elemanlarını yazdırırken görünüm tarafında (JSP/Facelets/etc) kullanmayı tercih edersiniz. – BalusC
Bu konuda tökezleyen herkes için: Ben veritabanını tüm görüntüleri yineleme (ve indirmek) tamamen kolay olmasını istemediğiniz sürece görüntü getirmek için düz kimliği kullanmamanın önemini vurgulamak istiyorum. Bunun yerine, yazılan BalusC makalesinde belirtildiği gibi kimlik ve dosya adının karma birleşimini kullanın. – mabi