需求,根据产品ID查询产品详情,产品详情会返回产品的一些文案,以及图片的url。需要做成,将文案信息记录在一个txt文档中,然后图片下载到文件夹,最后下载到本地,下载后自动删除刚才生成的文件夹以及文件夹生成的压缩包等。
例如压缩包打开是这样的:
txt文档是这样的:
需求已明了,现在开始从页面点击下载开始action层:
由于我是每次用户点击页面下载时,生成文件到一个压缩包,压缩包存在项目的路径下的,下载成功后删除文件以及压缩包。
/** * 获取当前产品的文案 * * @return * @throws IOException */ public Resolution getZip() throws IOException { HttpServletResponse response = getContext().getResponse(); Integer i = Integer.valueOf(gysupplierproducts.getProd_code());// JSONArray recal = getDealInfo.getDealInfoForOne(i);//得到产品信息json串 String url = ""; String name = ""; String fileDir = ""; for (int n = 0; n < recal.size(); n++) { Map<String, Object> returnMap = gysupplierproductsService.saveZip(recal.get(n).toString());//解析json串 url = returnMap.get("url").toString(); name = returnMap.get("name").toString(); fileDir = url; try { url = url+".zip"; try { File file = new File(url); File file2 = new File(fileDir); name = name+".zip"; response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=" + new String(name.getBytes("ISO8859-1"), "UTF-8")); response.setContentLength((int) file.length()); response.setContentType("application/zip");// 定义输出类型 FileInputStream fis = new FileInputStream(file); BufferedInputStream buff = new BufferedInputStream(fis); byte[] b = new byte[1024];// 相当于我们的缓存 long k = 0;// 该值用于计算当前实际下载了多少字节 OutputStream myout = response.getOutputStream();// 从response对象中得到输出流,准备下载 // 开始循环下载 while (k < file.length()) { int j = buff.read(b, 0, 1024); k += j; myout.write(b, 0, j); } myout.flush(); buff.close(); file.delete();//删除生成的压缩包文件 ZipUtils.delAllFile(fileDir);//文件夹下面还有东西,需要全部删除。 file2.delete(); //删除生产的文件 } catch (Exception e) { System.out.println(e); } } catch (Exception e) { e.printStackTrace(); } } return null; }