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 に答える