java - 将多个图像写入 ServletOutputStream?

标签 java servlets java-io

我有一个要求,从 Web 服务(例如:List)获取多个图像,并且必须将这些图像写入 ServletOutputStream。

当我单击“VIEW”链接时,它会调用 servlet,而该 servlet 会调用 Web 服务并以列表形式接收多个图像。

现在我正在尝试将这些图像写入 ServletOutputStream,但它不起作用..

尝试将图像作为 zip 发送

response.setContentType("application/zip");
  OutputStream os = null;
BufferedOutputStream bos = null;
ZipOutputStream zos = null;     
try{
    os = resp.getOutputStream();
    bos = new BufferedOutputStream(os);

    zos = new ZipOutputStream(bos);
    zos.setLevel(ZipOutputStream.STORED);

    sendMultipleFiles(zos, annotContent,"display");
}catch (IOException e) {
    resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} finally {
    if (zos != null) {
        zos.finish();
        zos.flush();
    }
    bos.close();
    os.close();
}

private void sendMultipleFiles(ZipOutputStream zos, Collection<byte[]> filesToSend, String name) throws IOException {
    myLogger.info("sendMultipleFiles is invoked..");
    for(byte[] f: filesToSend) {

        InputStream inStream = null;
        ZipEntry ze = null;

        try {
            inStream = new ByteArrayInputStream(f);

            ze = new ZipEntry(name + "-archived");
            ze.setComment("Dummy file");

            zos.putNextEntry(ze);
            int readByte = 0;
            while((readByte = inStream.read()) != -1)
            {
                zos.write(readByte);
            }
        } catch (IOException e) {
            System.out.println("Cannot find " );
        } finally {
            if (ze != null) {
                zos.closeEntry();
            }
            inStream.close();

        }
    }

以上代码不起作用..任何建议将不胜感激..

最佳答案

您的解决方案将取决于您所服务的内容类型 - 如果您正在提供 HTML 响应,则可以通过将图像存储在磁盘上( outside the context root 并写入图像显示端点)来解决问题,或者如果图像很小 - 将字节发送为 base64 encoding in the image tag directly .

如果您的响应类型不是 HTML - 这里有一些选项 - 您可以返回 ZIP file .

使用 MultiPart MIME Extension 的 servlet 的不太标准的方式.

编辑: 根据评论,mime 类型是 JPEG - 一种选择是将 JPEG 组合成一个更大的(不能发送多个)。合并二进制文件的字节 - JPEG 有其自己的压缩格式以及页眉、页脚和 EXIF 信息 - 您可能需要专门的 API 将它们合并为一个。 Here是我遇到的一个。如果合并 JPG 不是一种选择 - 您想要实现的目标无法一次性完成。

关于java - 将多个图像写入 ServletOutputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800569/

相关文章:

java - 使用 JSP 显示 <option> 文本而不是 "value"值

java - 调度或重定向到其他 Activity 的 Activity

java - 使用 mastruct 将 null 设置为目标

java - 需要帮助解决 SOLR 3.3 中与 mysql 数据导入处理程序相关的错误

java - 如何从 HttpServletRequest 获取 URL 片段标识符

java - 初始化上下文时不会调用 ServletContextListener.contextInitialized

java - 在 servlet 处理完成之前转发到 View

java - 在JAVA中多次处理大文件

java - BufferedReader vs Console vs Scanner

java - 将文件转换为字节数组时出错。 java.ioFileNotFoundException