java下载多文件夹的文件最终打zip包返回给用户
业务需求,需要做一个导出用户单据图片的功能,需求为:按单据单号分文件夹分别存储单据的图片!最终导出zip包给用户。通过网上各种找代码,写出一个小demo,供各位看官学习!
// 假装是一个单据集合 List<String> imgUrls = new ArrayList<>(); imgUrls.add("http://img1.imgtn.bdimg.com/it/u=2171717409,2602158110&fm=26&gp=0.jpg"); imgUrls.add("http://images.ofweek.com/Upload/News/2016-5/Finn/53/20160503055505730.jpg"); imgUrls.add("http://y1.ifengimg.com/a/2016_04/4855d9fcb2ccade.jpg"); try { //zip包的名称 String downloadFilename = "图片.zip"; downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8"); // 指明response的返回对象是文件流 response.setContentType("application/octet-stream"); // 设置在下载框默认显示的文件名 response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename); @Cleanup ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); imgUrls.forEach(i -> { InputStream fis = null; try { // 跨平台建文件夹和文件名字 // File.separator 根据操作系统来判断用什么文件分隔符 // 这里只建立了一个文件夹,如果想分类的话,在后面加上想要的文件夹名称即可 ZipEntry zipEntry = new ZipEntry("img_download" + File.separator +imgUrls.indexOf(i)+ ".jpg"); // 放到压缩包里 zos.putNextEntry(zipEntry); // 获得图片流 fis = getInputStreamByGet(i); if (null != fis) { byte[] buffer = new byte[1024]; int r = 0; // 从输入流读取一定数量的字节,存到缓存区中 while ((r = fis.read(buffer)) != -1) { zos.write(buffer, 0, r); } } } catch (Exception e) { e.printStackTrace(); } }); zos.flush(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 通过get请求得到读取器响应数据的数据流 * @param url * @return */ private static InputStream getInputStreamByGet(String url) { try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setReadTimeout(5000); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { return conn.getInputStream(); } } catch (IOException e) { e.printStackTrace(); } return null; }
写到这里就联想到用这个方法可以从网上爬一些照片到本地!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2018-02-24 项目/教程中使用母语命名的"问题"
早先试图找使用中文命名代码的项目, 但所获寥寥: 索引: 用中文编写代码的实用开源项目 · Issue #6 · program-in-chinese/overview. 更不用说教程了: 索引: 用中文代码作示例的编程教程 · Issue #5 · program-in-chinese/overview 前几天有幸看到Quora不久前的一个回复: Has any serious project been written in a non-English-based programming language? 得知西门子和爱立信内部都有使用母语命名的C/C++代码(德语/瑞典语). 原文如下: At both Siemens (German) and Ericsson (Swedish), I have seen programs written in C, and C++ where the only English words are the keywords. So if, new, else, for and the standard libraries like std::v...
- 下一篇
网站限制爬取薪资信息,代理IP来助阵
换工作需要知道该岗位目前市场薪资信息,企业招聘也需要知道各岗位当前薪资福利情况,这些情况是怎么分析出来的呢?这就要用到大数据了。但是,网站限制爬取薪资信息,面对这种情况可以使用代理IP来助阵的,就像芝麻代理的使用,方便快捷。 实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫。1.分析网页我们在查看拉勾网上的招聘信息的时候,搜索Python,或者是PHP等等的岗位信息,其实是向服务器发出相应请求,由服务器动态的响应请求,将我们所需要的内容通过浏览器解析,呈现在我们的面前。可以看到我们发出的请求当中,FormData中的kd参数,就代表着向服务器请求关键词为Python的招聘信息。分析比较复杂的页面请求与响应信息,推荐使用Fiddler,对于分析网站来说绝对是一大杀器。不过比较简单的响应请求用浏览器自带的开发者工具就可以,比如像火狐的FireBug等等,只要轻轻一按F12,所有的请求的信息都会事无巨细的展现在你面前。经由分析网站的请求与响应过程可知,拉勾网的招聘信息都是由XHR动态传递的。我们发现,以POST方式发出的请求有两个,分别是companyAjax.json和posit...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8