我目前在我的mysql数据库中有一个包含图像的blob。 我想要的是将这个图像显示给用户。
我无法将其放在目录结构中,因为blob可能是从图像到html的任何内容,因此涉及到它是一段HTML还是图像等逻辑。
我正在考虑检查BLOB以查看它是否是一个图像并且可以将其输出到临时目录然后将其作为资源加载但是我注意到wicket有一个BlobImageResource类但是我不知道这是怎么回事实施后,在谷歌搜索后无法找到任何示例。
有任何建议如何最好地做到这一点?
我正在使用wicket 6.xx并且可以访问spring和hibernate并且不反对使用第三方库
答案 0 :(得分:0)
private byte[] blob = some data...;
检查blob是一张图片:
Boolean isImage = ImageIO.read(new ByteArrayInputStream(blob)) != null;
if( isImage ){
// blob is an image...
}
创建一个IResource对象并在html中显示:
IResource imageResource = new DynamicImageResource() {
@Override
protected byte[] getImageData(IResource.Attributes attributes) {
return blob;
}
};
Image image = new Image("wicketId", imageResource);
this.add(image);
在html文件中使用:
<wicket:panel>
<img wicket:id="wicketId"/>
</wicket:panel>
答案 1 :(得分:0)
从MySql DB到HTML页面的blob图像的Wicket代码
公共类BlobToImage扩展了WebPage {
private static Blob blob;
public BlobToImage() {
BlobImageResource blobImgSrc = new BlobImageResource() {
@Override
protected Blob getBlob(Attributes attributes) {
return blob;
}
};
try {
getBlob();
} catch (SQLException e) {
e.printStackTrace();
}
Image img = new Image("image", blobImgSrc);
add(img);
}
public static void getBlob() throws SQLException{
Properties ConProps = new Properties();
ConProps.put("user","root");
ConProps.put("password", "root");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/google_map",ConProps);
System.out.println(conn);
java.sql.Statement stmt = conn.createStatement();
stmt.execute("SELECT id,image FROM images where id=1");
ResultSet rs = stmt.getResultSet();
while(rs.next()){
try{
blob = rs.getBlob("image");
} catch (Exception e) {
e.printStackTrace();
}
}
}
} 以下HTML代码有助于在网页上显示图片
Image <img wicket:id="image" alt="image">