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 页面上的外观示例。 渲染图像

我检查了图像在上传到网站时没有损坏,并且图像在数据库中很好。问题是在网站上呈现图像的代码。

我究竟做错了什么?

4

1 回答 1

0

好的,我解决了,显然变量不会在新页面加载时重置,即使它们不是静态的。

于 2013-12-02T18:44:32.553 回答