一下前置条件上一篇文章已经说了,这里直接上代码
String[] files = null;//里面存放着图片的链接,如果你是存放着blob在数据库那就直接有inputstream去接省掉去访问url的操作
try { String downloadFilename = "posterImg"+UUID.randomUUID()+".zip";//压缩包文件的名称 downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");//转换中文否则可能会产生乱码 response.setContentType("application/octet-stream");// 指明response的返回对象是文件流 response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);// 设置在下载框默认显示的文件名 ZipOutputStream zos = null; zos = new ZipOutputStream(response.getOutputStream());//获取zip输出流 //遍历所有图片 for (int i=0;i<files.length;i++) { URL url = new URL(files[i]); zos.putNextEntry(new ZipEntry(i+".png")); InputStream put= url.openConnection().getInputStream(); byte[] buffer = new byte[1024]; int r = 0; while ((r = put.read(buffer)) != -1) { zos.write(buffer, 0, r); } put.close();//每次都要关掉,不用以为等全部用完在关,因为我这里是每次new一个 } zos.flush();//向浏览器发出数据流 zos.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }