【发布时间】:2015-06-30 06:55:10
【问题描述】:
我需要从 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();
}
}
以上代码不起作用..任何建议将不胜感激..
【问题讨论】:
-
您应该创建一个 zip 文件并在其中一张一张地添加每个图像。然后,将 zip 文件的内容写入 OutputStream。
-
这种情况下的客户是什么?通常你会提供 HTML,它会引用多个图像,每个图像都会导致一个单独的请求。请给我们更多的背景信息。
-
@Jon Skeet:使用 JSF..当我点击“VIEW”链接时,它必须调用 servlet 并且响应(图像)应该显示为弹出窗口。
-
那么它是在浏览器中显示的 HTML 吗?在这种情况下,我建议您开始考虑浏览器会看到什么 - 这是对 HTML 的 一个 响应,然后将触发每个图像的请求...
-
No HTML..当我点击链接时,它会调用 servlet,响应会自动显示在新的弹出窗口中。