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(); } 戻り値です。 }