今天项目经理让做一个功能,就是批量下载图片,整体思路简单,但遇到了一个坑,需求是根据勾选的checkbox,点击下载按钮,弹出选择不同规格的图片对话框,并在下载完成后关闭对话框.坑就在下载完成后关闭对话框这个操作,折腾了2个小时,最后是用取巧的方式写了2个定时器模拟网络延时才完成的.因为按正常思路,如果下载完成后就关闭对话框,那对话框会关闭,下载操作是不会完成的,即便方法也执行了.同理先关闭对话框再下载同样不行.百度也没有具体原因,好像牵扯一些异步的原因,因为功能赶的着急,至少功能实现了,前后台基本代码贴下面,留个爪子.

 /*** 获取选择的id,并跳转到批量下载二维码对话框*/$('.btn-q').on('click', function() {var ids=[];$.each($('input:checkbox:checked'),function(){ids.push($(this).val());})if(ids.length>=1){showDialog("/quickmarkShow/downLoadImgsPage/"+ids, 800, 350, "下载二维码","WC_Dialog"); }else{noty({text: "请至少选择一条信息!", type:"warning",timeout: 500, //两秒modal: true});}});
 /*** 跳转到批量下载二维码图片对话框Controller*/@RequestMapping("/downLoadImgsPage/{ids}")// @Permission("user:edit")public String downLoadImgsPage(@PathVariable String ids, Model model) {model.addAttribute("ids", ids);return PREFIX + "downLoadImgsPage";}

//批量下载对话框,用定时器控制input框中id为sign的value值,完成下载后关闭对话框功能 <div class="widget-content nopadding"><input type="hidden" id="ids" name="ids" value="${ids}"/><input type="hidden" id="sign" name="ids" value="0"/>                                            <div class="form-actions text-center"><div class="controls"><label><input type="radio" name="type" value='big' checked/>大图(80mm*80mm)</label><br><label><input type="radio" name="type" value='small'/>小图(30mm*30mm)</label><br>  <label><input type="radio" name="type" value='shiLiang'/>矢量图</label>  </div></div><div class="form-actions text-center"><button id="downLoad" type="button" class="btn btn-success btn-s-nvl">下载</button></div></div>
//下载对话框对应js
//页面逻辑:页面每1.8秒检查一下id=sign的input框值,在点击下载按钮的时候给该iput赋值为1,这样既能实现下载功能,下能关闭对话框
$(function(){window.setInterval(function(){var sign = $("#sign").val();if(sign == 1){parent.$('#WC_Dialog').dialog('close');}}, 1000);
})
var ids = $("#ids").val();$("#downLoad").click(function(){var type = $('input[name=type]:checked').val();downLoadImgs(type);
});function downLoadImgs(type){//模拟表单提交var url = "/quickmarkShow/downLoadImgs";var form = $("<form></form>").attr("action", url).attr("method", "post");form.append($("<input></input>").attr("type", "hidden").attr("name", "ids").attr("value", ids));form.append($("<input></input>").attr("type", "hidden").attr("name", "type").attr("value", type));var timer1 = window.setInterval(function(){console.log(1);},1000);window.clearTimeout(timer1);$("#sign").val(1);form.appendTo('body').submit().remove();
}
/*** 批量下载二维码图片后台逻辑* @param id* @param model* @return*/@RequestMapping("/downLoadImgs")public void downLoadImgs(@RequestParam(value="ids") String ids,@RequestParam(value="type") String type,HttpServletRequest request, HttpServletResponse response) {//1.拿到对应图片地址的url数组String[] array = ids.split(",");ArrayList<String> idList = new ArrayList<>(Arrays.asList(array));List<Quickmark> quickmarks= quickmarkService.selectBatchIds(idList);ArrayList<String> urls = new ArrayList<>();for (Quickmark quickmark : quickmarks) {if("big".equals(type)){urls.add(quickmark.getMaxImg());}else if("small".equals(type)){urls.add(quickmark.getSmallImg());}else if("shiLiang".equals(type)){urls.add(quickmark.getVectorImg());}}String[] files = new String[urls.size()];urls.toArray(files);//2.开始批量下载功能try {String nowTimeString = TimeUtils.getNowTimeString();String downloadFilename = nowTimeString+".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]);zos.putNextEntry(new ZipEntry(quickmarks.get(i).getName()+".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) {System.out.println(e);}}

java实现批量下载图片并打包成zip相关推荐

  1. Java实现批量下载图片,打包成zip压缩包

    /*** 批量下载图片后台逻辑* @return*/ @GetMapping("/downLoad") public void download(HttpServletReques ...

  2. java 批量下载图片并打包成zip压缩包

    项目需求: 对接第三方接口时,因为数据中存储的是图片链接,第三方审核时需要把所有图片以zip压缩包的方式传入到他们ftp服务中. 提示:以下是本篇文章正文内容,下面案例可供参考 话不多说直接看代码,案 ...

  3. java后台批量下载文件并压缩成zip下载

    因项目需要,将服务器上的图片文件压缩打包zip,下载到本地桌面. 首先,前端js: function doQueryPic() {var picsDate = $("#picsDate&qu ...

  4. 批量下载文件,打包成zip压缩包

    批量下载文件,用程序打成zip压缩包在下载 前台传来要下载的url数组 @RequestMapping(value = "/download",method = RequestMe ...

  5. java中批量下载图片(httpClient)

    如题. java中使用httpClient批量下载图片,代码如下: import java.io.File; import java.io.IOException; import java.io.In ...

  6. java 文件流的处理 文件打包成zip

    1.下载文件到本地 public void download(HttpServletResponse response){String filePath ="";//文件路径Str ...

  7. java 二进制 包_如何用JAVA把内存里的二进制文件打包成ZIP包

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.ut ...

  8. JavaScript前端批量下载图片文件打包下载

    参考:https://blog.csdn.net/qdm13209211861/article/details/126668206 参考代码在获取base64的时候有图片失真的问题.下面的代码已经修复 ...

  9. Java导出多个excel并且打包成zip压缩文件

    最近的项目有一个导出汇总数据的要求,考虑到用户软件的差异,所以要分别导出xls以及xlsx并且打包提供下载,所以有了这个博客,代码如下. 实现思路: 获取需要导出的数据: 生成对应的xls.xlsx文 ...

最新文章

  1. 跟我学Java(配光盘)(跟我学)
  2. python中能够处理的最大整数是_实例讲解Python中整数的最大值输出
  3. 安装ipfs-api的命令变了,最新版的命令如下
  4. 期刊投稿状态_追踪期刊在线系统投稿状态(十七)
  5. 员工离职时被HR回复“猝死了再说”!HR道歉:没控制好情绪
  6. C/C++中使用的正则表达式库
  7. C#针对js escape解码
  8. java 1亿个数字中_求一亿个数字里面最小的10个数字
  9. 设计模式--模板方法(Template Method)
  10. 【逆向】【PE入门】使用PEView分析PE文件
  11. 利用ViewItems来管理我们ListView项之间的drag-and-drog
  12. 女生也玩橄榄球?而且还有世界杯?!
  13. 可视化工具 VTK 简介
  14. 2029年会实现通用人工智能吗?Gary Marcus「叫板」马斯克:赌十万美元如何?
  15. 因为很穷,所以一直很努力
  16. pygame 单色背景颜色
  17. 计算机里找不到用户文件夹,电脑里面的文件夹不见了,怎么找回
  18. 微信小程序,大佬救我!!!
  19. linux服务器IP伪造,Linux服务器间同网段IP伪装端口映射
  20. 最新版 IDEA 2022.1 正式上线 各种新操作...新功能...都在这里啦

热门文章

  1. S32K AUTOSAR ISOLAR工程配置-ComM/EcuM
  2. precision、recall、f1score的计算
  3. 新手的疑惑,动力取决于三点
  4. 8.13无限火力服务器维护到什么时候,LOL2019无限火力10月开放时间 无限乱斗回归时间确定_蚕豆网新闻...
  5. 洛谷P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]
  6. 嵌入式工程师之数据结构
  7. 青岛科技大学计算机田玉平,控制理论与控制工程;就业怎么样/?博士.
  8. 利融网浅谈大数据在信用审核中的应用
  9. 干涉仪测向原理matlab,干涉仪测向原理.pdf
  10. 【数值溢出】从二进制的角度看数值溢出