记录工作中使用导出excel功能,导出的excel带图片。前端传过来的是图片的url,那么请求参数就是字符串类型的url,把这条url转成流,生成文件并输出,返回值类型就是文件类型file。下面是先把图片下载,再压缩的工具类:

/*** URL转成图片并压缩*/
public class UrlImageUtil {public static File downloadAndCompress(String url,float quality) throws IOException{/*** 下载图片*/File file = null;InputStream inputStream = null;FileOutputStream fos = null;try {file = File.createTempFile("image", "jpg");URL urlFile = new URL(url);inputStream = urlFile.openStream();fos = new FileOutputStream(file);byte[] bytes = new byte[8192];int bytesRead = 0;while ((bytesRead = inputStream.read(bytes,0,8192)) != -1){fos.write(bytes,0,bytesRead);}} catch (Exception e) {e.printStackTrace();}finally {try {if (null != fos){fos.close();}if (null != inputStream){inputStream.close();}} catch (IOException e) {e.printStackTrace();}}/*** 指定压缩图片的方式、参数等*/ImageWriter imageWriter = ImageIO.getImageWritersByFormatName("jpg").next();ImageWriteParam imageWriteParam = new JPEGImageWriteParam(null);imageWriteParam.setCompressionMode(imageWriteParam.MODE_EXPLICIT);imageWriteParam.setCompressionQuality(quality);imageWriteParam.setProgressiveMode(imageWriteParam.MODE_DISABLED);ColorModel colorModel = ImageIO.read(file).getColorModel();imageWriteParam.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel,colorModel.createCompatibleSampleModel(32,32)));FileOutputStream out;if (!file.exists()){throw new FileNotFoundException("文件不存在");}else{BufferedImage bufferedImage = ImageIO.read(file);out = new FileOutputStream(file);imageWriter.reset();imageWriter.setOutput(ImageIO.createImageOutputStream(out));imageWriter.write(null,new IIOImage(bufferedImage,null,null),imageWriteParam);out.flush();out.close();}return file;}
}

下面是导出的实现方法:

/*** 导出excel的接口* @param response* @param workerListReqVO* @throws IOException*/@GetMapping(value = "/imageExportXls")public void imageExportXls(HttpServletResponse response, WorkerListReqVO workerListReqVO) throws IOException {try {int a = 0;HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet();String fileName = "人员信息表" + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());int rowNum = 1;String[] headers = {"姓名","性别","年龄","身份证号","工种","头像"};HSSFRow row = sheet.createRow(0);for (int i = 0; i < headers.length; i++) {sheet.setColumnWidth(i,4000);HSSFCell cell = row.createCell(i);HSSFRichTextString text = new HSSFRichTextString(headers[i]);cell.setCellValue(text);}List<WorkerListRespVO> list = workerBasicInfoService.queryWorkerInfoExport(workerListReqVO);for (WorkerListRespVO worker : list) {HSSFRow row1 = sheet.createRow(rowNum);row1.setHeight((short) 1000);row1.createCell(0).setCellValue(worker.getWorkerName());row1.createCell(1).setCellValue(worker.getGender_dictText());row1.createCell(2).setCellValue(String.valueOf(worker.getAge()));row1.createCell(3).setCellValue(worker.getIdCardNumber());row1.createCell(4).setCellValue(worker.getWorkType_dictText());if (worker.getHeadImageUrl() == null) {row1.createCell(5).setCellValue("暂无头像");} else {File file = UrlImageUtil.downloadAndCompress(worker.getHeadImageUrl(), 0.0005f);setImage(workbook, sheet, a, file);}rowNum++;a++;}response.reset();String excelFileName = new String(fileName.getBytes(), "iso-8859-1");response.setHeader("Disposition","attachment;filename=" + excelFileName + ".xls");response.setContentType("application/octet-stream;charset=UTF-8");OutputStream os = response.getOutputStream();workbook.write(os);os.flush();os.close();} catch (Exception e) {e.printStackTrace();response.sendRedirect("error.action");}}public void setImage(HSSFWorkbook workbook,HSSFSheet sheet,int a,File file){HSSFPatriarch patriarch = sheet.createDrawingPatriarch();ByteArrayOutputStream byteArrayOps = new ByteArrayOutputStream();try {BufferedImage image = ImageIO.read(file);ImageIO.write(image,"jpg",byteArrayOps);HSSFClientAnchor anchor = new HSSFClientAnchor(50, 55, 900, 200, (short) 5, a + 1, (short) 5, a + 1);anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE);patriarch.createPicture(anchor,workbook.addPicture(byteArrayOps.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));} catch (IOException e) {e.printStackTrace();}}

注意在传入多条url,只要有一条无效的url那它就不会有文件file生成,运行时会直接抛出空指针异常导致无法成功导出,所以注意做判空操作。

java实现传入URL下载图片并压缩,导出到excel相关推荐

  1. 通过URL下载图片并压缩

    通过url地址下载网络图片并压缩 实现思路:通过URL发现资源文件并拷贝到本地路径,各自建立文件夹路径,之后通过压缩工具包压缩父亲目录的文件即可 代码: package com.change.my.s ...

  2. Java实现根据URL下载图片到本地

    @GetMapping(value="/download") public Map<String,Object> downloadFile( HttpServletRe ...

  3. java线程池下载图片,压缩图片大小

    java对于线程池下载图片,以及图片的压缩,删除 其中引用了thumbnailator 来进行压缩减少了我们工作量 maven地址 <!-- https://mvnrepository.com/ ...

  4. JAVA 通过url下载图片保存到本地(亲测)

    //java 通过url下载图片保存到本地    public static void download(String urlString, int i) throws Exception {     ...

  5. Java多个文件根据URL下载后打包zip导出

    该示例框架为Spring Boot,根据Url把多个文件下载到指定的文件夹目录,然后再将文件夹目录打包成zip导出,有个简单的导出html页面,点击导出按钮下载zip 所需jar包commons-io ...

  6. HttpURLConnection根据URL下载图片

    来看下最简单的根据URL下载图片,此方法在实际开发中,不建议使用,因为有些图片是下载不了的,比如百度上的一些图片,返回http的响应码是405 [java] view plaincopy packag ...

  7. c++ url下载图片

    /* @author:CodingMengmeng @theme:C++根据图片url下载图片 @time:2017-1-6 22:58:00 @blog:http://www.cnblogs.com ...

  8. 前端通过后端返回的url下载图片方法

    前端通过后端返回的url下载图片方法: 1.a标签下载方式: <div class="code-info"><img :src="data.qrCode ...

  9. 【python】根据pixiv网站的图片url下载图片到本地

    写在前面 pixiv是著名的插画网站.如果我们通过爬虫技术得到了pixiv网站图片的url,那么如何根据url下载图片到本地. 安装模块 pip install requests 测试样例 打开以下页 ...

最新文章

  1. 【caffe-MATLAB】自己编译faster-rcnn的MATLAB版本
  2. Python学习笔记——glob模块【文件、路径操作】
  3. -bash: belts.awk: command not found
  4. Taro+react开发(95):问答模块02
  5. Facebook升级到MySQL 8.0付出的代价
  6. AppDelegate 方法介绍
  7. 纽约大学的好奇AI特别会提问,桌游玩得比人还666
  8. Linux软件安装到指定目录方法
  9. 三-(七) 视图(2020-4-3 )
  10. 吉林大学线性代数知识点及解题方法
  11. 基于LPC2148的音频分析仪设计
  12. 无线增益多路负反馈带通滤波器的研究
  13. 工会分销系统部署搭建维护定制工会分销高可用架构
  14. N1 Armbian 安装 Domoticz
  15. 目前ipad协议和安卓协议能实现微信百分之90功能 扫码进群 注册 阅读 关注支付功能等都能实现吗?ipad协议源码
  16. AMI CORE8 OEM BIOS开发入门
  17. 图像处理(3):深度学习之图像分类(垃圾分类案例)
  18. ROS下同步通信topic和异步通信service的异同
  19. 基于scrapy-redis的分布式腾讯新闻爬虫
  20. 58 同城 iOS 客户端 IM 系统演变历程

热门文章

  1. 云盒子企业私有云对局域网共享软件的代替
  2. 解决ITunes安装显示该电脑已经安装更新的版本
  3. 淘宝登录取Cookie分析
  4. Android Treble详细分析
  5. 基金-货币基金债券基金
  6. 同程网格版式设计代码页
  7. (反反爬虫)同程网酒店用户评论的全局token
  8. 关于UBNT 8.5.1版本无法从有线端管理设备的bug
  9. 大数据开发---数据仓库技术
  10. 打破企业多年来面临的数据困境,这款BI工具做到了