0
此代碼似乎可以正常工作,但是當我使用它從數據庫渲染圖像時,圖像在頁面上不完整。只有約70%的圖像被渲染。用不同的圖像渲染不同數量的圖像。圖像顯示不正確
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileData fileData = new FileData();
int id = Integer.parseInt(request.getParameter("id"));
UploadFile uploadFile = fileData.SelectFile(id);
inputStream = uploadFile.data;
fileName = uploadFile.name;
if(uploadFile.Type.equals("Image/Video"))
{
contentType = "image";
}
render(request, response);
}
private void render(ServletRequest request, ServletResponse response) throws IOException {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int inputStreamLength = 0;
int length = 0;
while ((length = inputStream.read(buffer)) > -1) {
inputStreamLength += length;
baos.write(buffer, 0, length);
}
if (inputStreamLength > contentLength) {
contentLength = inputStreamLength;
}
if (response instanceof HttpServletResponse) {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.reset();
httpResponse.setHeader("Content-Type", contentType);
httpResponse.setHeader("Content-Length", String.valueOf(contentLength));
httpResponse.setHeader("Content-Disposition", "\"" + contentDisposition +
"\"" + (fileName != null && !fileName.isEmpty()) !=
null ? "; filename=\"" + fileName + "\"": "");
}
response.getOutputStream().write(baos.toByteArray(), 0, (int)contentLength);
//finally
response.getOutputStream().flush();
//clear
baos = null;
}
finally {
close(response.getOutputStream());
close(inputStream);
}
}
private void close(Closeable resource) throws IOException {
if (resource != null) {
resource.close();
}
}
下面是在Firefox中的頁面上顯示圖像的示例。
我已經確認圖像在上傳到網站時沒有損壞,並且圖像在數據庫中沒有問題。問題是在網站上呈現圖像的代碼。
我在做什麼錯?