一、下载多张图片到默认地址
①、请求后台
var curPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curPath.indexOf(pathName);
var localhostPaht = curPath.substring(0,pos);
var projectName = pathName.substring(0,pathName.substr(1).indexOf('/')+1);
var baseuri = localhostPaht + projectName;
function onloadurl(url){ var qrcode = baseuri + "/xxxxx/onloadurl?qrcodeUrl=" + url; var alink = document.createElement("a"); alink.href = qrcode; alink.download = new Date().getTime() + ".jpg"; alink.click(); }
②后台处理
/** * 下载图片信息 * @param request * @param response * @param id * @return * @throws IOException * @throws MalformedURLException */ @RequestMapping("/onloadurl") public void onloadurl(HttpServletRequest req, HttpServletResponse response, String qrcodeUrl) throws MalformedURLException, IOException { HttpURLConnection connection = (HttpURLConnection) new URL(qrcodeUrl).openConnection(); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); connection.setRequestMethod("GET"); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream inputStream = connection.getInputStream(); if (inputStream != null) { BufferedImage bufferedImage = ImageIO.read(inputStream); ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); response.getOutputStream().close(); inputStream.close(); } } }
二、下载多张图片变成zip到本地地址
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * @author 作者 ki16: * @version 创建时间:2021年6月15日 下午5:28:03 * */ public class TestMain { public static void main(String[] args) { //创建父级目录 用于存放分区(分区中存放多个分类) String fatherPath = "D:\宠物区"; File fatherFile = new File(fatherPath); try { if (!fatherFile.exists()) { fatherFile.mkdir(); } else { fatherFile.delete(); fatherFile.mkdir(); } } catch (Exception e) { e.printStackTrace(); } //创建分类list 存放分类 List<String> itemList = new ArrayList<>(); itemList.add("dog"); itemList.add("cat"); itemList.add("mouse"); //创建list 存放图片 List<File> fileList = new ArrayList<>(); fileList.add(new File("E:/新建文件夹11/图片/dog.jpg"));//本地图片的地址 fileList.add(new File("E:/新建文件夹11/图片/1.jpg")); for (String item : itemList) { //遍历存储图片地址 String url = fatherPath + "/" + item + ".zip"; System.out.println("url================>" + url); File zipFile = new File(url); // 调用压缩方法 ZipMultiFileUtil.zipFiles(fileList.stream().toArray(File[]::new), zipFile); } //将项目名称的文件夹 压缩为zip String fileDir ="D:\宠物区"; System.out.println("fileDir=" + fileDir + " fatherPath=" + fatherPath ); ZipMultiFileUtil.fileToZip(fatherPath, fileDir, fatherPath + ".zip"); } static class ZipMultiFileUtil { public static void zipFiles(File[] srcFiles, File zipFile) { try { if (srcFiles.length != 0) { // 判断压缩后的文件存在不,不存在则创建 if (!zipFile.exists()) { zipFile.createNewFile(); } else { zipFile.delete(); zipFile.createNewFile(); } // 创建 FileInputStream 对象 FileInputStream fileInputStream = null; // 实例化 FileOutputStream 对象 FileOutputStream fileOutputStream = new FileOutputStream(zipFile); // 实例化 ZipOutputStream 对象 ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream); // 创建 ZipEntry 对象 ZipEntry zipEntry = null; // 遍历源文件数组 for (int i = 0; i < srcFiles.length; i++) { System.out.println("==============srcFiles===============" + srcFiles[i]); // 将源文件数组中的当前文件读入 FileInputStream 流中 fileInputStream = new FileInputStream(srcFiles[i]); // 实例化 ZipEntry 对象,源文件数组中的当前文件 zipEntry = new ZipEntry(srcFiles[i].getName()); zipOutputStream.putNextEntry(zipEntry); // 该变量记录每次真正读的字节个数 int len; // 定义每次读取的字节数组 byte[] buffer = new byte[1024]; while ((len = fileInputStream.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, len); } } zipOutputStream.closeEntry(); zipOutputStream.close(); fileInputStream.close(); fileOutputStream.close(); } } catch (Exception e) { e.printStackTrace(); } } /** * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下 * * @param sourceFilePath :待压缩的文件路径 * @param zipFilePath :压缩后存放路径 * @param fileName :压缩后文件的名称 * @return */ public static boolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) { boolean flag = false; File sourceFile = new File(sourceFilePath); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; ZipOutputStream zos = null; if (sourceFile.exists() == false) { System.out.println("待压缩的文件目录:" + sourceFilePath + "不存在"); sourceFile.mkdir(); // 新建目录 } try { //File zipFile = new File(zipFilePath + "/" + fileName); File zipFile = new File(fileName); System.out.println("======zipFile=========>" + zipFile); if (zipFile.exists()) { System.out.println(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件."); } else { File[] sourceFiles = sourceFile.listFiles(); if (null == sourceFiles || sourceFiles.length < 1) { System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩."); } else { fos = new FileOutputStream(zipFile); zos = new ZipOutputStream(new BufferedOutputStream(fos)); byte[] bufs = new byte[1024 * 10]; for (int i = 0; i < sourceFiles.length; i++) { //创建ZIP实体,并添加进压缩包 ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName()); zos.putNextEntry(zipEntry); //读取待压缩的文件并写进压缩包里 fis = new FileInputStream(sourceFiles[i]); bis = new BufferedInputStream(fis, 1024 * 10); int read = 0; while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) { zos.write(bufs, 0, read); } } flag = true; } } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { //关闭流 try { if (null != bis) bis.close(); if (null != zos) zos.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } return flag; } } }