需求:从服务器下载图片。
因为项目前期设置的问题,导致各个项目的图片是分开存放的。客户要求根据项目下载,实现项目下分地方,然后地方目录下是图片
@ResponseBody public void downloadUrl(HttpServletResponse response, HttpServletRequest request){ String sourceFilePath=properties.getString("sourceFilePath");//要下载的文件路径 eavlProName = xxx;//项目名 String downloadName = "xxx.zip"; //下载文件名 String agent = request.getHeader("USER-AGENT"); //浏览器内核信息 try { if (agent.contains("MSIE")||agent.contains("Trident")) {// IE downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8"); } else { downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1"); } } catch (Exception e) { e.printStackTrace(); } zip(sourceFilePath, eavlProName, response, downloadName); response.getOutputStream().close(); //这个应该没什么用 } private void zip(String souceFileName, String eavlProName, HttpServletResponse response, String downloadName) { File file = new File(souceFileName); try { zip(file, eavlProName, response, downloadName); } catch (IOException e) { e.printStackTrace(); } } private void zip(File souceFile, String eavlProName, HttpServletResponse response, String downloadName) throws IOException { ZipOutputStream out = null; //设置压缩流。 response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\""); try { out = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); out.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 } catch (Exception e) { e.printStackTrace(); } out.setEncoding("gbk"); zip(souceFile, out, eavlProName, eavlProName,null); out.closeEntry(); out.close(); } private void zip(File souceFile, ZipOutputStream out, String base, String eavlProName, Integer i) throws IOException { if (souceFile.isDirectory()) { File[] files = souceFile.listFiles(); if (files.length != 0) { if (i == null || i != 1) { //对于地方目录先不创建,当地方目录下存在项目的截图时,才创建 out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; } if (i == null) { i = 0; } i++; for (File file : files) { if (i == null || i != 2) { //2地方下面的项目名.这种不创建目录 zip(file, out, base + file.getName(), eavlProName, i); }else { String picPathname =file.getName(); if (picPathname.equals(eavlProName)) { //取对应项目下的文件 zip(file, out, base, eavlProName, i); } } } } } else { if (base.length() > 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(souceFile.getName())); } FileInputStream in = new FileInputStream(souceFile); int b; byte[] by = new byte[1024]; while ((b = in.read(by)) != -1) { out.write(by, 0, b); } in.close(); } }
参考:http://www.jianshu.com/p/7cabe09ce563