国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java實現下載文件到本地

ytwman / 4127人閱讀

摘要:下載下載下載用戶信息表必要的說明目前存在下載中文的文件名出現亂碼,但好在不影響其中的內容,只是文件名會亂碼。問題鏈接引用實現將文件或者文件夾壓縮成

需求

導出文件后存留在了服務器中,需要提供下載按鈕,點擊后可下載到本地;(因為涉及多個文件,下載前先將文件進行壓縮,提供下載壓縮文件)

效果預覽

代碼 主要方法
/**
     * 下載生成的所有在線/離線用戶信息表格
     * @param request
     * @param response
     * @return 壓縮文件
     * @throws FTPConnectionClosedException
     * @throws IOException
     */
    public File downloadExcel (HttpServletRequest request, HttpServletResponse response) 
            throws FTPConnectionClosedException, IOException {
        //提供下載文件前進行壓縮,即服務端生成壓縮文件
        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.設置content-disposition響應頭控制瀏覽器以下載的形式打開文件
        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) {
            //將緩沖區的數據輸出到客戶端瀏覽器
            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  是否保留原來的目錄結構,true:保留目錄結構; 
     *                          false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現同名文件,會壓縮失敗)
     * @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實體,構造器中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){
                // 需要保留原來的文件結構時,需要對空文件夾進行處理
                if(KeepDirStructure){
                    // 空文件夾的處理
                    zos.putNextEntry(new ZipEntry(name + "/"));
                    // 沒有文件,不需要文件的copy
                    zos.closeEntry();
                }
            }else {
                for (File file : listFiles) {
                    // 判斷是否需要保留原來的文件結構
                    if (KeepDirStructure) {
                        // 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠,
                        // 不然最后壓縮包中就不能保留原來的文件結構,即:所有文件都跑到壓縮包根目錄下了
                        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;
    }
前端

公司內部寫法,理解其中含義即可。

    ...
    
    ...
    
必要的說明

目前存在下載中文的文件名出現亂碼,但好在不影響其中的內容,只是文件名會亂碼。有興趣的同學可以幫忙解答下。問題鏈接

引用

[1] https://www.cnblogs.com/zeng1... Java實現將文件或者文件夾壓縮成zip

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72681.html

相關文章

  • 多線程系列之學習多線程下載的基本原理和基本用法(1)

    摘要:多線程下載原理及步驟在本地創建一個大小跟服務器文件相同大小的臨時文件。在這里在介紹一個有關多線程下載的中的相關類隨機文件訪問類只有才有搜尋方法,而這個方法也只適用于文件。利用這個類才能實現文件的多線程下載。 多線程下載在我們生活中非常常見,比如迅雷就是我們常用的多線程的下載工具,當然還有斷點續傳,斷點續傳我們在下一節來講,android手機端下載文件時也可以用多線程下載,我們這里是在j...

    darry 評論0 收藏0
  • Maven就是這么簡單

    摘要:軟件項目的管理就會變得簡單很多。比如說的驅動程序,,在是獲取不到的,就需要手工上傳到里是倉庫組,在里沒有這個概念,是特有的。 什么是Maven Maven是一個采用純Java編寫的開源項目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM.xml的文件中.. Maven是一款跨平臺的項目...

    leonardofed 評論0 收藏0
  • 怎么用Java從網上下載一個視頻下來

    摘要:用的流從網上下載一個視頻原理就是用對象與目標地址建立一個鏈接,用流的方式從這個鏈接上把視頻的二進制數據讀取下載然后再寫入本地文件。然后循環依次寫入緩存的大小,直至結束。 用Java的IO流從網上下載一個視頻 原理:就是用URL對象與目標地址建立一個鏈接,用IO流的方式從這個鏈接上把視頻的二進制數據讀取下載然后再寫入本地文件。 因為小弟比較菜的緣故,不會下載那些加了密的視頻鏈接,這里我就...

    warmcheng 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<