色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Java Springboot如何基于圖片生成下載鏈接

瀏覽:2日期:2022-09-03 14:57:19

現(xiàn)有一些圖片在服務(wù)器上的鏈接,在瀏覽器中打開這些鏈接是直接顯示在瀏覽器頁面的形式。

現(xiàn)在需要生成這些圖片的單獨(dú)下載以及打包下載鏈接,即在瀏覽器中打開下載鏈接后彈出下載框提示下載。由于前端存在跨域問題,所以圖片下載由后臺接口完成。

首先編寫文件下載工具類:

import java.net.URL;import java.net.MalformedURLException;import org.apache.commons.io.FileUtils;public class FileDownloadUtil {/** * 下載文件---返回下載后的文件存儲路徑 * * @param url 文件路徑 * @param dir 目標(biāo)存儲目錄 * @param fileName 存儲文件名 * @return */ public static void downloadHttpUrl(String url, String dir, String fileName) throws BusinessException { try { URL httpurl = new URL(url); File dirfile = new File(dir); if (!dirfile.exists()) {dirfile.mkdirs(); } FileUtils.copyURLToFile(httpurl, new File(dir+fileName)); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace();26 } } public static boolean deleteFile(File file) { if (file.exists()) { return file.delete(); } return false; }}

單張圖片下載

Controller層接口:

import org.apache.commons.lang.StringUtils;import java.io.*;protected HttpServletResponse response;/** * 單張圖片下載 * * @param url 要下載的圖片url * @author: nemowang */ @ApiImplicitParams({ @ApiImplicitParam(name = 'url', value = '圖片url', required = true, dataType = 'String', paramType = 'query'), }) @ApiOperation(value = '單張圖片下載', notes = '單張圖片下載') @RequestMapping(value = '/downloadPicture', method = RequestMethod.GET) public void downloadPicture(String url) {// 拼接完整圖片路徑。這里填寫圖片鏈接 String urlPath = ''; // 獲取圖片文件后綴名 String postfix = '.' + StringUtils.substringAfterLast(url, '.'); // 獲取當(dāng)前類的所在項(xiàng)目路徑 File directory = new File(''); String courseFile; String srcPath; File srcFile = null; FileInputStream fileInputStream = null; InputStream fis = null; OutputStream out = null; try { courseFile = directory.getCanonicalPath(); String fileName = '' + StringUtil.getUUID() + postfix; // 下載文件 FileDownloadUtil.downloadHttpUrl(urlPath, courseFile, fileName); srcPath = courseFile + fileName; srcFile = new File(srcPath); fileInputStream = new FileInputStream(srcPath); fis = new BufferedInputStream(fileInputStream); byte[] buffer = new byte[fis.available()]; fis.read(buffer); response.setContentType('application/octet-stream'); response.setHeader('Content-disposition', 'attachment;filename=' + fileName); out = response.getOutputStream(); out.write(buffer); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } finally { try {if (fileInputStream != null) { fileInputStream.close();}if (fis != null) { fis.close();}if (out != null) { out.close();} } catch (IOException e) {e.printStackTrace(); } } // 刪除中間文件 if (srcFile != null) { System.out.println(FileDownloadUtil.deleteFile(srcFile)); } }

因?yàn)槭荊ET請求,所以直接拼接接口路由+參數(shù),用瀏覽器打開就能彈出下載。

至此單張圖片下載接口結(jié)束。

多張圖片打包下載

Controller層接口:

/** * 圖片打包下載 */ @ApiImplicitParams({ @ApiImplicitParam(name = 'urls', value = '圖片url列表', required = true, dataType = 'List', paramType = 'query'), }) @ApiOperation(value = '圖片打包下載', notes = '圖片打包下載') @RequestMapping(value = '/downloadPictureList', method = RequestMethod.GET) public void downloadPictureList(List urls) { List<String> fileNameList = new ArrayList<>(); for (int i = 0; i < urls.size(); i++) { // 獲取文件名 fileNameList.add(StringUtils.substringAfterLast(urls.get(i), '/')); // 拼接完整圖片路徑 urls.set(i, DOMAIN + urls.get(i)); } // 獲取當(dāng)前類的所在項(xiàng)目路徑 File directory = new File(''); String courseFile; String srcPath; File srcFile = null; // 要打包的文件列表 List<File> fileList = new ArrayList<>(); ZipOutputStream zos = null; OutputStream out = null; try { courseFile = directory.getCanonicalPath(); // 下載文件 for (int i = 0; i < urls.size(); i++) {String fileName = '' + fileNameList.get(i);FileDownloadUtil.downloadHttpUrl(urls.get(i), courseFile, fileName);srcPath = courseFile + fileName;srcFile = new File(srcPath);fileList.add(srcFile); } long start = System.currentTimeMillis(); response.setContentType('application/x-zip-compressed'); response.setHeader('Content-disposition', 'attachment;filename=' + StringUtil.getUUID() + '.zip'); out = response.getOutputStream(); zos = new ZipOutputStream(out); for (File file : fileList) {byte[] buf = new byte[BUFFER_SIZE];zos.putNextEntry(new ZipEntry(file.getName()));int len;FileInputStream in = new FileInputStream(file);while ((len = in.read(buf)) != -1) { zos.write(buf, 0, len);}zos.closeEntry();in.close(); } long end = System.currentTimeMillis(); System.out.println('壓縮完成,耗時(shí):' + (end - start) + ' ms'); out.flush(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) {throw new RuntimeException('zip error from ZipUtils', e); } finally { if (zos != null) {try { zos.close();} catch (IOException e) { e.printStackTrace();} } if (out != null) {try { zos.close();} catch (IOException e) { e.printStackTrace();} } } // 刪除中間文件 if (fileList != null) { for (File file : fileList) {System.out.println(FileDownloadUtil.deleteFile(file)); } } }

同樣是GET請求,所以也是拼接接口路由+參數(shù),用瀏覽器打開就能彈出下載。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 91国语精品自产拍在线观看一 | 午夜影院a级片 | 成人牲交一极毛片 | 亚洲午夜在线观看 | 久久精品国产99久久 | 亚洲第一欧美 | 九九在线精品视频xxx | 男人的天堂久久爱 | 澳门毛片免费观看 | 欧美日韩在线播放一区二区三区 | 中文一级国产特级毛片视频 | 19+韩国主播青草vip视频 | 精品亚洲福利一区二区 | 成人免费视频网站 | 国内精品久久久久影院免费 | 欧美日本在线一区二区三区 | 国产在线a不卡免费视频 | 91久国产在线观看 | 国产亚洲精品资源一区 | 亚洲欧美一区二区三区在线播放 | 国产一级做a爰片在线看 | 亚洲精品tv久久久久 | 国产三级国产精品 | 亚洲一区二区久久 | 亚洲三级中文字幕 | 最新69成人精品毛片 | 国产视频高清在线 | 国产精品秦先生手机在线 | 国内精品福利视频 | 一级片网址 | 国产精品a人片在线观看 | fc2久久| 欧美高清免费一级在线 | 国产一区二区亚洲精品 | 成人免费的性色视频 | 一二三区视频 | 亚洲精品一区国产二区 | 一本色道久久88 | 国产亚洲欧美日韩在线看片 | 日韩精品中文字幕在线观看 | 欧美日韩偷拍自拍 |