Javaパッケージを複数のファイルに圧縮して出力ストリームをダウンロードします

pom.xml

< 依存性> 
            < のgroupId > org.apache.commons </ のgroupId > 
            < たartifactId >コモンズ-圧縮</ たartifactId > 
            < バージョン> 1.18 </ バージョン> 
        </ 依存>

 

// ディスクファイルを複数にパッケージ化され、圧縮された出力ストリームをダウンロード 
    @GetMappingを(値=「/ Download1」公共 無効 Download1(HttpServletRequestのリクエスト、HttpServletResponseの応答)がスロー{例外を
        文字列OUTPUTFILENAME = +「ファイル」新新」(てSimpleDateFormatをYYYYMMDDHHMMSS ")形式(。新しい新しい日付())+" .zipファイル" ;
         // 設定応答パラメータ
        response.reset(); 
        response.setContentType( "コンテンツタイプ:オクテットストリーム;のcharset = UTF-8 " ); 
        応答.setHeader(「コンテンツ・処分」、「添付ファイル;ファイル名=」+ 新しい文字列((OUTPUTFILENAME).getBytes()、 "ISO-8859-1")); 
        ServletOutputStreamをアウト = response.getOutputStream()。

        ZipArchiveOutputStream zous = 新しいZipArchiveOutputStream(アウト)。
        zous.setUseZip64(Zip64Mode.AsNeeded)。

        F1ファイル = 新しいファイル( "D:\\テストファイル\\ aaa.pngを" ); 
        F2ファイル = 新しいファイル( "D:\\テストファイル\\ bbb.pngを" ); 
        一覧 <ファイル>のfileList = 新しい ArrayListを<> (); 
        fileList.add(F1)。
        fileList.add(F2)。

        以下のための{:(のfileListファイルのファイル)
            、文字列filename =file.getName(); 
            InputStream InputStreamは = 新しいFileInputStreamを(ファイル); 
            ByteArrayOutputStreamたBAO = 新しいByteArrayOutputStream();
            バイト []バッファ= 新しい バイト [1024 ];
            int型のlen;
            一方、(!(LEN = inputStream.read(バッファ))= -1 ){ 
                baos.write(バッファ、 0 、LEN)。
            } 
            であれば(BAOを!= NULL ){ 
                baos.flush()。
            } 
            バイト []バイト= baos.toByteArray()。

            // 設定ファイル名 
            ArchiveEntryエントリ= 新しい新しいZipArchiveEntry(filename)で、
            zous.putArchiveEntry(エントリー); 
            zous.write(バイト); 
            zous.closeArchiveEntry(); 
            IF(!BAOS = ヌル){ 
                baos.close(); 
            } 
        } 
        IF(!zous = ヌル){ 
            zous.close(); 
        } 
    } 

    // ネットワークリソースファイルのパッケージ化されたURLに複数の圧縮ファイル出力ストリームへとダウンロード 
    @GetMapping(値= "/ Download2を" 公共 無効 Download2(HttpServletRequestをリクエスト、レスポンスのHttpServletResponse)がスローされます例外{ 
        文字列OUTPUTFILENAME = "文件" + 。のSimpleDateFormat( "YYYYMMDDHHMMSS")形式(新しい日付())+ "の.zip" // 设置応答参数
        response.reset(); 
        response.setContentType( "コンテンツ・タイプ:オクテットストリーム;のcharset = UTF-8" )。
        response.setHeader( "コンテンツの廃棄"、 "添付ファイル;ファイル名=" + 新しい文字列((OUTPUTFILENAME).getBytes()、 "ISO-8859-1" )); 
        ServletOutputStreamをアウト = response.getOutputStream()。

        zous.setUseZip64(Zip64Mode.AsNeeded)。

        文字列のパス1 =「http://www.baidu.com/img/bd_logo1.png」
        文字列のパス2 =「http://www.baidu.com/img/bd_logo1.png」
        一覧 <文字列> pathlistに= 新しい ArrayListを<> (); 
        pathList.add(パス1)。
        pathList.add(パス2)。

        (文字列パス:pathlistに){ 
            文字列fileNameに = UUID.randomUUID()+ ".PNG" 
            InputStream InputStreamは = getInputStreamFromUrl(パス)。
            ByteArrayOutputStreamたBAO = 新しいByteArrayOutputStream();
            バイト []バッファ= 新しい バイト [1024 ];
            int型のlen;
            一方、(!(LEN = inputStream.read(バッファ))= -1 ){ 
                baos.write(バッファ、 0 、LEN)。
            } 
            であれば(BAOを!= NULL ){ 
                baos.flush()。
            } 
            バイト []バイト= baos.toByteArray()。

            // 设置文件名 
            ArchiveEntryエントリ= 新しいZipArchiveEntry(fileNameに); 
            zous.putArchiveEntry(エントリー)。
            zous.write(バイト)。
            zous.closeArchiveEntry(); 
            もしたBAO(!= NULL ){ 
                baos.close(); 
            } 
        } 
        IF(zous!= NULL ){ 
            zous.close(); 
        } 
    } 

    / ** 
     ネットワークアドレスが取得した*入力ストリームファイル
     * 
     * @param パスアドレス
     * @return 
     * / 
    パブリック 静的のInputStream getInputStreamFromUrl(文字列のパス){ 
        URLのURL = ヌル; 
        InputStreamがIS = ヌル;
         試み{
            URL = 新しい URL(パス);
        } キャッチ(例外:MalformedURLException電子){ 
            e.printStackTrace(); 
        } 
        試みる{ 
            HttpURLConnectionのCONN = (HttpURLConnectionの)url.openConnectionを(); 
            conn.setDoInput(真の); 
            conn.connect(); 
            ある = conn.getInputStream()。
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        } 
        戻り値です。
    }

 

おすすめ

転載: www.cnblogs.com/zengnansheng/p/11649704.html