O uso principal é o ZIP Stream org.apache.tools.zip.zipoutputStream. Aqui, o EXECL é usado como exemplo.
Ideia primeiro escreva o fluxo zip no fluxo de saída de resposta HTTP e depois escreva o fluxo do Excel no fluxo zip (você não precisa gerar arquivos e empacotá -los aqui. Basta ler e escrever o modelo EXECL e produzir os dados no fluxo zip e definir o nome do arquivo para cada fluxo)
Por exemplo: 1.xls, 2.xls, 3.xls Arquivos existem no arquivo EXECL no WebApp do Projeto
1. Controlador
@RequestMapping (value = "/exportall", método = requestMethod.get) public void exportall () lança ioexception {try {httpServletResponse resposta = this.getResponse (); Response.setContentType ("Application/Octet-Stream"); String ExeclName = "Relatório"; Response.AddHeader ("Content-Disposition", "Applement; filename =" +new String (ExeclName.getBytes (), "ISO-8859-1") +". Zip"); OutputStream out = Response.getOutputStream (); testService.Exportall (Out); } catch (Exceção e) {....}}2. Serviço
importar java.io.OutputStream; importar org.apache.poi.hssf.usermodel.hssfsheet; importar org.apache.poi.hssf.usermodel.hsfworkbook; java.io.fileInputStream; importar javax.servlet.http.httpServletRequest; importar org.apache.poi.hssf.usermodel.hssfcellstyle; import org.apache.poi.hssf.USMOModel.hsSheets; org.apache.poi.hssf.usermodel.hssfworkbook; importar org.apache.poi.poifs.filesystem.poifsfilesystem; importar org.springframework.web.context.request.requestContextholder; importação org.springframework.web.context.request.servletRequestattributes; public boolean exportall (outputStream Out) {zipOutputStream zipStream = null; HSSFWorkbook wb = null; tente {list <Test> dados = testService.getTestData (); zipStream = novo zipOutputStream (out); // aqui está emitindo o fluxo zip para o fluxo httpro -resposta para (int i = 0; i <3; i ++) {wb = poiutil.getworkbook (i); // obtendo 0,1,2.xls arquivo hssf sheet = wb.getatat (0,1,2.xls hssf sheet = wb.getatat (0,2.2.xls hssf sheet = wb.getatat (0,2.2.x. testService.SetSheet (Sheet, DataS); // ... lidar com o Operação de Conteúdo do Arquivo Zipentry Zipentry = new Zipentry (new String ("Nome do arquivo xxx" .getBytes (), "utf-8")+". xls"); // Nomeie você mesmo, aqui está 1, 2, 3 zipStream.putNextEntry (zipentry); wb.Write (ZipStream); // Este é o loop que grava execl no zippack toda vez que ZipStream.flush (); }} Catch (Exceção e) {THROW NOVA Sysexception (ErrorConstants.common_system_error, e); } finalmente {tente {if (wb! = null) {wb.close (); } if (zipStream! = null) {zipStream.close (); } out.flush (); out.Close (); } catch (ioexception e) {lança nova sysexception (errorconstants.common_close_error, e); }}} public static hssfworkbook getworkbook (string bh) {try {string line = file.separator; ServletRequestattributes areQuestAttributes = (servletRequestattributes) requestContextholder.getRequestAttributes (); HttpServletRequest request = arequestattributes == null? Null: areQuesttributes.getRequest (); String webpath = request.getServletContext (). GetRealPath ("/"); Arquivo Arquivo = novo arquivo (WebPath+Line+"Excel"+Linha+BH+". XLS"); Poifsfilesystem poifsfilesystem = new Poifsfilesystem (new FileInputStream (FILE)); HSSFWorkbook WB = novo HSSFWorkbook (PoifsFilesystem); retornar wb; } Catch (Exceção e) {tire nova sysexception (errorconstants.common_system_error, e); }}O resultado final gera um relatório.zip, que contém 3 arquivos: 1.xls, 2.xls, 3.xls
Resumir
O exposto acima é o Java Batch File Comppress Export and Download para o código de exemplo local introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!