我的目标是将多个java.io.file对象放入zip文件并打印到httpServletResponse以供用户下载.
这些文件是由JAXB marshaller创建的.它是一个java.io.file对象,但它实际上不在文件系统上(它只在内存中),因此我无法创建fileinputStream.
我见过的所有资源都使用OutputStream来打印zip文件内容.但是,所有这些资源都使用fileinputStream(我无法使用).
谁知道我怎么能做到这一点?
最佳答案看看Apache Commons Compress库,它提供了您需要的功能.当然,“erickson”对你的问题发表评论是正确的.您将需要文件内容而不是java.io.file对象.在我的例子中,我假设你有一个方法
byte [] getTheContentFormSomewhere(int fileNummer),它返回fileNummer-th文件的文件内容(在内存中). – 当然这个功能设计很差,但它仅用于说明.
它应该有点像这样:
voID compress(final OutputStream out) { ZipOutputStream zipOutputStream = new ZipOutputStream(out); zipOutputStream.setLevel(ZipOutputStream.STORED); for(int i = 0; i < 10; i++) { //of course you need the file content of the i-th file byte[] onefileContent = getTheContentFormSomewhere(i); addOnefileToZipArchive(zipOutputStream,"file"+i+"."txt",onefileContent); } zipOutputStream.close();}voID addOnefileToZipArchive(final ZipOutputStream zipStream,String filename,byte[] content) { ZipArchiveEntry zipEntry = new ZipArchiveEntry(filename); zipStream.putNextEntry(zipEntry); zipStream.write(pdfBytes); zipStream.closeEntry();}
你的http控制器的Snipets:
httpServletResponse response... response.setContentType("application/zip"); response.addheader("Content-disposition","attachment; filename=\"compress.zip\""); response.addheader("Content-transfer-encoding","binary"); ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(); compress(outputBuffer); response.getoutputStream().write(outputBuffer.toByteArray()); response.getoutputStream().flush(); outputBuffer.close();
总结 以上是内存溢出为你收集整理的java – 如何为“虚拟文件”列表创建ZIP文件并输出到httpservletresponse全部内容,希望文章能够帮你解决java – 如何为“虚拟文件”列表创建ZIP文件并输出到httpservletresponse所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)