(1)---pox配置
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.9</version>
</dependency>
(2)---建立公共方法
/**
*Zip文件工具类
*
*@author @authorwenfei.fang
*/
publicclassZipFileUtil
{
/**
*通过 try-with-resources 的语法来创建流,可以安全的自动关闭
* @authorwenfei.fang
*@paramZipArchiveOutputStream
压缩的文件流
*@paramsonFileName
向压缩文件插入的文件名 test.txt
*@paraminStreamFile
test.txt文件输入流
*@throwsIOException Io异常
*/
publicstaticvoidcompressFilesZip(ZipArchiveOutputStream zaos,
String SonFileName, InputStream inStreamFile)
{
if(SonFileName!=null&&SonFileName.length()
> 0) {
try{
zaos.setUseZip64(Zip64Mode.AsNeeded);
ZipArchiveEntryzipArchiveEntry=newZipArchiveEntry(SonFileName);
zaos.putArchiveEntry(zipArchiveEntry);
try{
byte[]buffer=newbyte[1024
* 5];
intlen=
-1;
while((len=inStreamFile.read(buffer))
!= -1) {
zaos.write(buffer,
0,len);
}
zaos.closeArchiveEntry();
}catch(Exceptione)
{
thrownewRuntimeException(e);
}finally{
if(inStreamFile!=null)
inStreamFile.close();
}
zaos.finish();
}catch(Exceptione)
{
thrownewRuntimeException(e);
}finally{
try{
if(inStreamFile!=null)
{
inStreamFile.close();
}
}catch(IOExceptione)
{
thrownewRuntimeException(e);
}
}
}
}
/**
* @authorwenfei.fang
*@paramzipOutputStream
压缩的文件流
*@paramsonFileName
向压缩文件插入的文件名 test.txt
*@paraminStreamFile
test.txt文件输入流
*@throwsIOException Io异常
*/
publicstatic void writeFile(ZipOutputStreamzipOutputStream,
StringsonFileName, InputStreaminStreamFile)throwsIOException
{
ZipEntry ze=newZipEntry(sonFileName);
zipOutputStream.putNextEntry(ze);
byte[]buffer=newbyte[1204];
intlen=
-1;
while((len=inStreamFile.read(buffer))
!= -1) {
System.err.println(len);
zipOutputStream.write(buffer,
0,len);
}
inStreamFile.close();
}
/**
*@authorwenfei.fang
*@用apachecommentsio包中的IOUtils中的方法
*@paramzipOutputStream
压缩的文件流
*@paramsonFileName
向压缩文件插入的文件名 test.txt
*@paraminStreamFile
test.txt文件输入流
*@throwsIOException Io异常
*@messageCopy
bytes from a large (over 2GB) InputStream to an OutputStream. 将字节超过2G的字节输入流复制到输出流中
* //IOUtils.copyLarge(input, output)
*/
publicstaticvoidwriteFileUseIOUtils(ZipOutputStreamzipOutputStream,
StringsonFileName, InputStreaminStreamFile)throwsIOException
{
ZipEntryze=newZipEntry(sonFileName);
zipOutputStream.putNextEntry(ze);
IOUtils.copy(inStreamFile,zipOutputStream);
IOUtils.closeQuietly(inStreamFile);
}
}
在control层的操作
@RequestMapping(value ="/api/fblMaster/downloadNet23")
public@ResponseBodyString
downloadNet2(HttpServletResponse response)throwsMalformedURLException
{
//通过给定的URL字符串创建URL
URLurl=newURL("http://10.152.244.25:16200/cs/idcplg?IdcService=GET_FILE&dID=23378&dDocName=GGSTEST16200022613&allowInterrupt=1");
try{
URLConnectionconn=url.openConnection();
InputStreaminStreamFile=conn.getInputStream();
URLConnectionconn1=url.openConnection();
InputStreaminStreamFile1=conn1.getInputStream();
URLConnectionconn2=url.openConnection();
InputStreaminStreamFile2=conn2.getInputStream();
URLConnectionconn21=url.openConnection();
InputStreaminStreamFile21=conn21.getInputStream();
response.setHeader("Content-Disposition","attachment;
filename=Barcode_Label_Approval_Verification"+ String.valueOf(System.currentTimeMillis()).substring(4,
13) +
".zip");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload");
OutputStream out=response.getOutputStream();
ZipOutputStream zos=newZipOutputStream(out);
ZipFileUtil.writeFileUseIOUtils(zos,"test1.jpg",inStreamFile);
ZipFileUtil.writeFileUseIOUtils(zos,"sonFileName1/test1.jpg",inStreamFile1);
ZipFileUtil.writeFileUseIOUtils(zos,"sonFileName2/test2.jpg",inStreamFile2);
ZipFileUtil.writeFileUseIOUtils(zos,"sonFileName2/test1.jpg",inStreamFile21);
//关闭文件流(如果不关闭可能在压缩包中的文件只有名称没有文件内容)
IOUtils.closeQuietly(zos);
}catch(FileNotFoundExceptione)
{
e.printStackTrace();
}catch(IOExceptione)
{
e.printStackTrace();
}
returnnull;
}