以前文章已经介绍了 MinIO 的环境搭建,已经对文件的上传下载方法,本篇文章一块儿与你们来学习图片压缩上传的方法java
最近客户总抱怨 APP 中图片显示较慢, 升级服务器带宽又没有多的预算。查看缘由,是由于如今你们都是用的智能手机拍照,拍出来的照片小则 2-3 M,大则十几 M,因此致使图片显示较慢。思考再三,决定将图片进行压缩再上传图片服务器来解决图片显示慢的问题web
<!-- 图片压缩 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
本次咱们选择了使用 thumbnailator 来做为压缩的工具服务器
/** * 判断文件是否为图片 */ public boolean isPicture(String imgName) { boolean flag = false; if (StringUtils.isBlank(imgName)) { return false; } String[] arr = {"bmp", "dib", "gif", "jfif", "jpe", "jpeg", "jpg", "png", "tif", "tiff", "ico"}; for (String item : arr) { if (item.equals(imgName)) { flag = true; break; } } return flag; }
/** * 上传文件 * * @param file 文件 * @return */ public JSONObject uploadFile(MultipartFile file) throws Exception { JSONObject res = new JSONObject(); res.put("code", 500); // 判断上传文件是否为空 if (null == file || 0 == file.getSize()) { res.put("msg", "上传文件不能为空"); return res; } // 判断存储桶是否存在 if (!client.bucketExists("test")) { client.makeBucket("test"); } // 拿到文件后缀名,例如:png String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1); // UUID 做为文件名 String uuid = String.valueOf(UUID.randomUUID()); // 新的文件名 String fileName = DateUtils.getYyyymmdd() + "/" + uuid + "." + suffix; /** * 判断是不是图片 * 判断是否超过了 100K */ if (isPicture(suffix) && (1024 * 1024 * 0.1) <= file.getSize()) { // 在项目根目录下的 upload 目录中生成临时文件 File newFile = new File(ClassUtils.getDefaultClassLoader().getResource("upload").getPath() + uuid + "." + suffix); // 小于 1M 的 if ((1024 * 1024 * 0.1) <= file.getSize() && file.getSize() <= (1024 * 1024)) { Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(0.3f).toFile(newFile); } // 1 - 2M 的 else if ((1024 * 1024) < file.getSize() && file.getSize() <= (1024 * 1024 * 2)) { Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(0.2f).toFile(newFile); } // 2M 以上的 else if ((1024 * 1024 * 2) < file.getSize()) { Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(0.1f).toFile(newFile); } // 获取输入流 FileInputStream input = new FileInputStream(newFile); // 转为 MultipartFile MultipartFile multipartFile = new MockMultipartFile("file", newFile.getName(), "text/plain", input); // 开始上传 client.putObject("test", fileName, multipartFile.getInputStream(), file.getContentType()); // 删除临时文件 newFile.delete(); // 返回状态以及图片路径 res.put("code", 200); res.put("msg", "上传成功"); res.put("url", minioProp.getEndpoint() + "/" + "test" + "/" + fileName); } // 不须要压缩,直接上传 else { // 开始上传 client.putObject("test", fileName, file.getInputStream(), file.getContentType()); // 返回状态以及图片路径 res.put("code", 200); res.put("msg", "上传成功"); res.put("url", minioProp.getEndpoint() + "/" + "test" + "/" + fileName); } return res; }
如您在阅读中发现不足,欢迎留言!!!dom