java實(shí)現(xiàn)文件打包壓縮輸出到瀏覽器下載
文件打包壓縮輸出到瀏覽器下載
java批量下載文件打包壓縮工具類,輸出到瀏覽器下載,可以自己改名。
一、工具類:
入?yún)?:文件LIst ;打包后的名字 ;響應(yīng)到瀏覽器
/** * 功能:壓縮多個(gè)文件,輸出壓縮后的zip文件流 * * @param srcfile:源文件列表 * @param zipFileName:壓縮后的文件名 * @param response: Http響應(yīng) */ public void zipFiles(List<File> srcfile, String zipFileName, HttpServletResponse response) throws IOException { byte[] buf = new byte[1024]; // 獲取輸出流 BufferedOutputStream bos = null; try { bos = new BufferedOutputStream(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } FileInputStream in = null; ZipOutputStream out = null; try { response.reset(); // 重點(diǎn)突出 // 不同類型的文件對應(yīng)不同的MIME類型 response.setContentType("application/x-msdownload"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + zipFileName + ".zip"); // ZipOutputStream類:完成文件或文件夾的壓縮 out = new ZipOutputStream(bos); for (int i = 0; i < srcfile.size(); i++) { in = new FileInputStream(srcfile.get(i)); // 給列表中的文件單獨(dú)命名 out.putNextEntry(new ZipEntry(srcfile.get(i).getName())); int len = -1; while ((len = in.read(buf)) != -1) { out.write(buf, 0, len); } } out.close(); bos.close(); log.info("壓縮完成."); } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) in.close(); if (out != null) out.close(); } }
二、調(diào)用
zipFiles(files, zipName, response);
生成zip文件并瀏覽器導(dǎo)出
總結(jié)一下,關(guān)于Java下載zip文件并導(dǎo)出的方法,瀏覽器導(dǎo)出。
String downloadName = "下載文件名稱.zip"; downloadName = BrowserCharCodeUtils.browserCharCodeFun(request, downloadName);//下載文件名亂碼問題解決 //將文件進(jìn)行打包下載 try { OutputStream out = response.getOutputStream(); byte[] data = createZip("/fileStorage/download");//服務(wù)器存儲(chǔ)地址 response.reset(); response.setHeader("Content-Disposition","attachment;fileName="+downloadName); response.addHeader("Content-Length", ""+data.length); response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.write(data, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); }
獲取下載zip文件流
public byte[] createZip(String srcSource) throws Exception{ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(outputStream); //將目標(biāo)文件打包成zip導(dǎo)出 File file = new File(srcSource); a(zip,file,""); IOUtils.closeQuietly(zip); return outputStream.toByteArray(); }
public void a(ZipOutputStream zip, File file, String dir) throws Exception { //如果當(dāng)前的是文件夾,則進(jìn)行進(jìn)一步處理 if (file.isDirectory()) { //得到文件列表信息 File[] files = file.listFiles(); //將文件夾添加到下一級打包目錄 zip.putNextEntry(new ZipEntry(dir + "/")); dir = dir.length() == 0 ? "" : dir + "/"; //循環(huán)將文件夾中的文件打包 for (int i = 0; i < files.length; i++) { a(zip, files[i], dir + files[i].getName()); //遞歸處理 } } else { //當(dāng)前的是文件,打包處理 //文件輸入流 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(dir); zip.putNextEntry(entry); zip.write(FileUtils.readFileToByteArray(file)); IOUtils.closeQuietly(bis); zip.flush(); zip.closeEntry(); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式
這篇文章主要介紹了mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08淺談java面向?qū)ο?類,封裝,this,構(gòu)造方法)
下面小編就為大家?guī)硪黄獪\談java面向?qū)ο?類,封裝,this,構(gòu)造方法)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06項(xiàng)目管理利器-Maven(Windows安裝)圖文教程
下面小編就為大家?guī)硪黄?xiàng)目管理利器-Maven(Windows安裝)圖文教程。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06舉例講解Java編程中this關(guān)鍵字與super關(guān)鍵字的用法
這篇文章主要介紹了Java編程中this關(guān)鍵字與super關(guān)鍵字的用法示例,super是this的父輩,在繼承過程中兩個(gè)關(guān)鍵字經(jīng)常被用到,需要的朋友可以參考下2016-03-03java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)分析
這篇文章主要介紹了java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)分析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Intellij IDEA 2017.3使用Lombok及常用注解介紹
這篇文章主要介紹了Intellij IDEA 2017.3使用Lombok及常用注解介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09tio-boot?jfinal-plugins框架整合redis示例詳解
這篇文章主要為大家介紹了tio-boot?jfinal-plugins框架整合redis示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12java數(shù)據(jù)結(jié)構(gòu)之希爾排序
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)之希爾排序的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11