今天在查看weblogic伺服器日誌時後台報出了大量的錯誤,如下:
java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '146592' bytes instead of stated: '462285' bytes.
at weblogic.servlet.internal.ServletOutputStreamImpl.ensureContentLength(ServletOutputStreamImpl.java:470)
at weblogic.servlet.internal.ServletResponseImpl.ensureContentLength(ServletResponseImpl.java:1176)
at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1188)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2590)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
經過多次測試後找到解決辦法,主要是因為在圖片下載時,
bis = new BufferedInputStream(rs.getBinaryStream(img));
response.setContentLength(rs.getInt(2));
response.setBufferSize(1024);
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "filename=" + InfoVariable.converu2a("img"));
ServletOutputStream op = response.getOutputStream();
byte[] b= new byte[1024];
int size=0;
while ((size = bis.read(b)) != -1)
op.write(b, 0, size);
匯入到response中的位元組數沒有設定,可以通過增加如下設定解決此問題,
//其中rs.getInt(2)為在資料庫中blob欄位的大小,可以通過dbms_lob.getlength(img)函數取得
response.setContentLength(rs.getInt(2)); //注意cotentlength的大小為圖片的大小
如果要是圖片打不開,或者顯示為亂碼可以用response.resetBuffer();重新整理一下緩衝.