在Web应用程序中显示外部图像

时间:2012-11-05 12:54:14

标签: java-ee fileinputstream

我们的应用程序显示一个外部图像(客户端徽标),该图像特定于多租户环境中的每个客户端。在运行时动态确定图像文件的位置,并将图像流(作为字节)转移到servlet中的浏览器的输出流。它完成如下

private void sendFileToDownload(HttpServletResponse resp) throws IOException {
    InputStream inputStream = new BufferedInputStream(new FileInputStream(fileNameWitPath));
    OutputStream outputStream = resp.getOutputStream();
    resp.setContentLength((int) inputStream.getLength());
    try {
        writeFileToOutput(inputStream, outputStream);
    } finally {
        finalize(inputStream, outputStream);
    }
}

private void writeFileToOutput(InputStream inputStream, OutputStream outputStream) throws IOException {
    byte[] b = new byte[32 * 1024];
    int count;
    while ((count = inputStream.read(b)) != -1) {
        outputStream.write(b, 0, count);
    }
}

private void finalize(InputStream inputStream, OutputStream outputStream) throws IOException {
    try {
        outputStream.flush();
    } catch (IOException e) {
        logger.debug("IOException was caught while flushing the output stream.", e);
    }
    inputStream.close();
}

在负载测试中,我们发现当多个线程(~300)执行相同的操作时,打开文件并关闭它是昂贵的操作。特别是执行FileInputStream构造函数。

我想知道在java ee Web应用程序中显示外部图像的替代方法。

请注意,出于安全原因,我们无法在img html标记的src属性中提供图像的路径。客户端浏览器无法访问外部图像位置。只有应用程序服务器才能访问它。

0 个答案:

没有答案