struts2 将文件压缩成流下载(不生成临时文件)
我想将文件压缩成流(ZipOutPutStream),不生成临时文件,然后下载到客户端。
而struts2的下载是用的InputStream,请问如何进行转换?或者有别的方法。
我以前用Servlet实现过将文件将数据生成ServletOutPutStream然后下载,不知道用Struts2能不能实现,谢谢!
------解决方案--------------------
不生成临时文件啊... 确实有点难啊.
你利用 ZipOutPutStream 动态生成压缩文件,直接写到客户端, 而 Struts2 的 ResultType 是不好修改源代码, 那么你可以 自定义一个 Interceptor, 然后根据文件的 ContentType 类型判断是否是输出 压缩文件,然后在 Interceptor 的逆回阶段(actionInvocation.invoke()方法之后) 作一些处理;
这是我的想法,但是没有实践....
------解决方案--------------------
文件压缩成流(ZipOutPutStream),不生成临时文件,然后下载到客户端。
那你就是想把ZipOutPutStream直接放在response中输出到客户端,把ZipOutPutStream输出流写入到InputStream流中。
看看
InputStream stream = null;
ZipOutPutStream bos = null;
try {
stream = file.getInputStream();
bos = new FileOutputStream(filePath);
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = stream.read(buffer, 0, buffer.length)) != -1){
bos.write(buffer, 0, bytesRead);//
}
} finally {
if(bos != null){
try {
bos.close();
} finally {
if(stream != null){
stream.close();
}
}
}
}
------解决方案--------------------
http://www.bitscn.com/wap.php?action=article&id=145718
看看这个