一直使用mongodb來保持圖片的,以前生成縮略圖的時候總是先將圖片打開然後在對圖片創建流保存到mongodb中,缺點大家可想而知,
一開始認爲還可以,但是測試發現 過去程序和mongodb不是在同一臺機器上的話,有的時候可能打開圖片失敗,我個人認爲是網絡傳輸的原因。
只要程序和mongodb在同一臺機器上面就不出現這樣的原因。
後來想到直接將mongodb中的圖片的流取出來 使用圖片流來生成縮略圖。
public byte[] getImageByte(GridFSDBFile gridFSFile,DB db,int width,int height){
OutputStream os=new ByteArrayOutputStream();
InputStream is=null;
byte[] b=null;
try {
gridFSFile.writeTo(os); //寫入輸出流
ByteArrayOutputStream byteArrayOutputStream = (ByteArrayOutputStream) os;
is = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
Image image=ImageIO.read(is);
Thumbnail thumbnail=new Thumbnail(image);
b= thumbnail.resizeFixLimitHeight(width, height);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (is!=null)
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(os!=null)
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return b;
}
這樣一來就不會出網絡間調用出現問題的情況!