日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前后端分离项目后端向前端返回压缩包的方法实现java版

發(fā)布時間:2024/4/18 HTML 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前后端分离项目后端向前端返回压缩包的方法实现java版 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近公司的項目是讓前端有讓用戶下載zip壓縮包(里面都是圖片,圖片是保存在ftp上的)的任務,經(jīng)過調研,將最終方案復制在下面:

//zip文件的下載@GetMapping("/zip/{imagePath}")@ResponseBodypublic void zip(HttpServletResponse response, @PathVariable(value = "imagePath", required = false) String imagePathList) throws IOException {String[] imagePaths = imagePathList.split(CCPCommon.CCP_SEPARATOR);//設置返回響應頭response.reset();// 自動判斷下載文件類型response.setContentType("multipart/form-data");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("picture.zip", "UTF-8"));FTPClient ftpClient;ftpClient = FtpUtil.getFTPClient("xxx", "xxx", "xxx", 21);// 中文支持ftpClient.setControlEncoding("UTF-8");ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.enterLocalPassiveMode();ftpClient.changeWorkingDirectory("ftp://xxx");ZipOutputStream zos = null;OutputStream os = response.getOutputStream();try {zos = new ZipOutputStream(os);InputStream ins = null;for (String imagePath : imagePaths) {if (imagePath == null || imagePath.equals("") || imagePath.equals("undefined")) {//如果書沒有上傳continue;}ins = ftpClient.retrieveFileStream(new String(imagePath.getBytes("UTF-8"), "iso-8859-1"));if (ins != null) {zos.putNextEntry(new ZipEntry(imagePath));int len;byte[] buff = new byte[1024];while (-1 != (len = ins.read(buff, 0, buff.length))) {zos.write(buff, 0, len);}zos.closeEntry();ins.close();ftpClient.completePendingCommand();//不讓一個循環(huán)后ftpClient自動關閉}}zos.flush();} catch (Exception e) {e.printStackTrace();} finally {if (zos != null) {try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}

這里很重要的操作:

//設置返回響應頭response.reset();// 自動判斷下載文件類型response.setContentType("multipart/form-data");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("picture.zip", "UTF-8"));

一定要設置響應頭部的type,并且可以給這個壓縮包起一個名字。
還有就是ftp的一個細節(jié):

ftpClient.completePendingCommand();

如果不加這一行,ftp自動會關閉連接,一定要讓它保持連接狀態(tài)。

總結

以上是生活随笔為你收集整理的前后端分离项目后端向前端返回压缩包的方法实现java版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。