需求,根据产品ID查询产品详情,产品详情会返回产品的一些文案,以及图片的url。需要做成,将文案信息记录在一个txt文档中,然后图片下载到文件夹,最后下载到本地,下载后自动删除刚才生成的文件夹以及文件夹生成的压缩包等。

例如压缩包打开是这样的:

java文档打包成压缩包并且下载

txt文档是这样的:

java文档打包成压缩包并且下载

需求已明了,现在开始从页面点击下载开始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;
    }
View Code

相关文章:

  • 2021-08-31
  • 2021-08-09
  • 2021-06-28
  • 2021-08-09
  • 2021-04-28
猜你喜欢
  • 2022-12-23
  • 2021-08-23
  • 2022-12-23
  • 2021-12-02
  • 2021-12-12
  • 2021-07-22
相关资源
相似解决方案