/** * 批量下载证件照、文件 * * @return */ @GetMapping("/downLoadImgs") @Transactional public void downLoadImgs(HttpServletRequest request,@RequestParam(name = "ids", required = true) String ids, HttpServletResponse response) { //1.拿到对应图片地址的url数组 String[] array = ids.split(","); ArrayList<String> idList = new ArrayList<>(Arrays.asList(array)); //根据ids查询出所有的档案 List<XzFile> xzFiles = xzFileService.selectBatchIds(idList); ArrayList<String> urls = new ArrayList<>(); for (XzFile xzFile : xzFiles) { //todo 在图片路径加上前缀 urls.add("http:*****"+xzFile.getIdPhoto()); } String[] files = new String[urls.size()]; urls.toArray(files); //2.开始批量下载功能 try { // String nowTimeString = TimeUtils.getNowTimeString(); String downloadFilename = "证件照" + ".zip";//文件的名称 downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");//转换中文否则可能会产生乱码 response.setContentType("application/octet-stream");// 指明response的返回对象是文件流 response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);// 设置在下载框默认显示的文件名 ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); for (int i = 0; i < files.length; i++) { URL url = new URL(files[i]); //拿到文件名 String spath=xzFiles.get(i).getIdPhoto(); int pos = spath.lastIndexOf('\'); String sfilename = spath.substring(pos + 1);//带扩展名 pos = sfilename.lastIndexOf('.'); String sfilenameEx = sfilename.substring(0,pos);//不带扩展名 //设置文件名 zos.putNextEntry(new ZipEntry(sfilenameEx + ".jpg")); InputStream fis = url.openConnection().getInputStream(); byte[] buffer = new byte[1024]; int r = 0; while ((r = fis.read(buffer)) != -1) { zos.write(buffer, 0, r); } fis.close(); } zos.flush(); zos.close(); } catch (Exception e) { return ; } }