摘要:下載下載下載用戶信息表必要的說明目前存在下載中文的文件名出現(xiàn)亂碼,但好在不影響其中的內(nèi)容,只是文件名會亂碼。問題鏈接引用實現(xiàn)將文件或者文件夾壓縮成
需求
導(dǎo)出文件后存留在了服務(wù)器中,需要提供下載按鈕,點擊后可下載到本地;(因為涉及多個文件,下載前先將文件進行壓縮,提供下載壓縮文件)
效果預(yù)覽 代碼 主要方法/** * 下載生成的所有在線/離線用戶信息表格 * @param request * @param response * @return 壓縮文件 * @throws FTPConnectionClosedException * @throws IOException */ public File downloadExcel (HttpServletRequest request, HttpServletResponse response) throws FTPConnectionClosedException, IOException { //提供下載文件前進行壓縮,即服務(wù)端生成壓縮文件 File file = new File(zipPath); FileOutputStream fos = new FileOutputStream(file); ZipUtils.toZip(path, fos, true); //1.獲取要下載的文件的絕對路徑 String realPath = zipPath; //2.獲取要下載的文件名 String fileName = realPath.substring(realPath.lastIndexOf(File.separator)+1); response.reset(); response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); //3.設(shè)置content-disposition響應(yīng)頭控制瀏覽器以下載的形式打開文件 response.addHeader("Content-Disposition","attachment;filename=" + new String(fileName.getBytes(),"utf-8")); //獲取文件輸入流 InputStream in = new FileInputStream(realPath); int len = 0; byte[] buffer = new byte[1024]; OutputStream out = response.getOutputStream(); while ((len = in.read(buffer)) > 0) { //將緩沖區(qū)的數(shù)據(jù)輸出到客戶端瀏覽器 out.write(buffer,0,len); } in.close(); return file; }壓縮方法[1]
public static void toZip(String srcDir, OutputStream out, boolean KeepDirStructure) throws RuntimeException{ long start = System.currentTimeMillis(); ZipOutputStream zos = null ; try { zos = new ZipOutputStream(out); File sourceFile = new File(srcDir); compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure); long end = System.currentTimeMillis(); System.out.println("壓縮完成,耗時:" + (end - start) +" ms"); } catch (Exception e) { throw new RuntimeException("zip error from ZipUtils",e); }finally{ if(zos != null){ try { zos.close(); } catch (IOException e) { e.printStackTrace(); } } } } * 遞歸壓縮方法 * @param sourceFile 源文件 * @param zos zip輸出流 * @param name 壓縮后的名稱 * @param KeepDirStructure 是否保留原來的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu); * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會出現(xiàn)同名文件,會壓縮失敗) * @throws Exception */ private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure) throws Exception{ byte[] buf = new byte[BUFFER_SIZE]; if(sourceFile.isFile()){ // 向zip輸出流中添加一個zip實體,構(gòu)造器中name為zip實體的文件的名字 zos.putNextEntry(new ZipEntry(name)); // copy文件到zip輸出流中 int len; FileInputStream in = new FileInputStream(sourceFile); while ((len = in.read(buf)) != -1){ zos.write(buf, 0, len); } // Complete the entry zos.closeEntry(); in.close(); } else { File[] listFiles = sourceFile.listFiles(); if(listFiles == null || listFiles.length == 0){ // 需要保留原來的文件結(jié)構(gòu)時,需要對空文件夾進行處理 if(KeepDirStructure){ // 空文件夾的處理 zos.putNextEntry(new ZipEntry(name + "/")); // 沒有文件,不需要文件的copy zos.closeEntry(); } }else { for (File file : listFiles) { // 判斷是否需要保留原來的文件結(jié)構(gòu) if (KeepDirStructure) { // 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠, // 不然最后壓縮包中就不能保留原來的文件結(jié)構(gòu),即:所有文件都跑到壓縮包根目錄下了 compress(file, zos, name + "/" + file.getName(),KeepDirStructure); } else { compress(file, zos, file.getName(),KeepDirStructure); } } } } }SpringMVC
@Download @Path("downloadExcel") public File DownloadExcel(HttpServletRequest request, HttpServletResponse response) throws FTPConnectionClosedException, IOException { File file = exportXMPPUserInfo.downloadExcel(request, response); return file; }前端
公司內(nèi)部寫法,理解其中含義即可。
... ...必要的說明
目前存在下載中文的文件名出現(xiàn)亂碼,但好在不影響其中的內(nèi)容,只是文件名會亂碼。有興趣的同學(xué)可以幫忙解答下。問題鏈接
引用[1] https://www.cnblogs.com/zeng1... Java實現(xiàn)將文件或者文件夾壓縮成zip
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72681.html
摘要:多線程下載原理及步驟在本地創(chuàng)建一個大小跟服務(wù)器文件相同大小的臨時文件。在這里在介紹一個有關(guān)多線程下載的中的相關(guān)類隨機文件訪問類只有才有搜尋方法,而這個方法也只適用于文件。利用這個類才能實現(xiàn)文件的多線程下載。 多線程下載在我們生活中非常常見,比如迅雷就是我們常用的多線程的下載工具,當(dāng)然還有斷點續(xù)傳,斷點續(xù)傳我們在下一節(jié)來講,android手機端下載文件時也可以用多線程下載,我們這里是在j...
摘要:軟件項目的管理就會變得簡單很多。比如說的驅(qū)動程序,,在是獲取不到的,就需要手工上傳到里是倉庫組,在里沒有這個概念,是特有的。 什么是Maven Maven是一個采用純Java編寫的開源項目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM.xml的文件中.. Maven是一款跨平臺的項目...
摘要:用的流從網(wǎng)上下載一個視頻原理就是用對象與目標地址建立一個鏈接,用流的方式從這個鏈接上把視頻的二進制數(shù)據(jù)讀取下載然后再寫入本地文件。然后循環(huán)依次寫入緩存的大小,直至結(jié)束。 用Java的IO流從網(wǎng)上下載一個視頻 原理:就是用URL對象與目標地址建立一個鏈接,用IO流的方式從這個鏈接上把視頻的二進制數(shù)據(jù)讀取下載然后再寫入本地文件。 因為小弟比較菜的緣故,不會下載那些加了密的視頻鏈接,這里我就...
閱讀 3897·2021-09-27 13:35
閱讀 1081·2021-09-24 09:48
閱讀 2910·2021-09-22 15:42
閱讀 2349·2021-09-22 15:28
閱讀 3154·2019-08-30 15:43
閱讀 2623·2019-08-30 13:52
閱讀 2979·2019-08-29 12:48
閱讀 1458·2019-08-26 13:55