假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html

一,接口已经写死

1 public static String upload(String appCode, MultipartFile inputFile)

1 public static String upload(String appCode, File inputFile)

后台已经写死成这两种格式了

 1 MultipartFile inputFile = multipartRequest.getFile(fileElementId);
 2             CommonsMultipartFile cf= (CommonsMultipartFile)inputFile;
 3             DiskFileItem fi = (DiskFileItem)cf.getFileItem();
 4              String storeLocation = fi.getStoreLocation().toString();
 5             originalFilename = inputFile.getOriginalFilename();
 6             imageType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).trim().toLowerCase();
 7             long sizeOther = inputFile.getSize();
 8             size = sizeOther +"kb";
 9             double scale = 1.0d ;
10             if(sizeOther >= 3*1024*1024){
11                 if(sizeOther > 0){
12                      scale = (3*1024*1024f) / sizeOther  ;
13                 }
14                 Thumbnails.of(inputFile.getInputStream()).scale(1f).outputQuality(scale).outputFormat("jpg").toFile(storeLocation);
15                 File file = new File(storeLocation+".jpg");
16                 fssId = FssFileClient.upload("app-weixin", file);
17                  file.delete();
18             }else{
19                 fssId = FssFileClient.upload("app-weixin", inputFile);
20             }

StoreLocation=/opt/oracle/tomcat/t-2/work/Catalina/localhost/weixin/upload_6af40051_15fc4efb752__7ffd_00000001.tmp

StoreLocation=D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp5\work\Catalina\localhost\weixin\upload__ad6bac5_15fc4f98fa1__8000_00000000.tmp

去找到这个路径,因为在这个路径下会产生一个缓存文件,对这个缓存文件进行压缩,压缩完了之上传,上传至后在删除。

二,就是自己创建一个文件,然后在进行修改

 1     MultipartFile inputFile = multipartRequest.getFile(fileElementId);
 2             originalFilename = inputFile.getOriginalFilename();
 3             imageType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).trim().toLowerCase();
 4             long sizeOther = inputFile.getSize();
 5             size = sizeOther +"kb";
 6             double scale = 1.0d ;
 7             if(sizeOther >= 3*1024*1024){
 8                 if(sizeOther > 0){
 9                      scale = (3*1024*1024f) / sizeOther  ;
10                 }
11                 String path=request.getSession().getServletContext().getRealPath("/")+"js" + System.getProperty("file.separator") +  "upload"+System.getProperty("file.separator")+"yasuo."+imageType;
12                 Thumbnails.of(inputFile.getInputStream()).scale(1f).outputQuality(scale).toFile(path);
13                 File file = new File(path);
14                 fssId = FssFileClient.upload("app-weixin", file);
15             }else{
16                 fssId = FssFileClient.upload("app-weixin", inputFile);
17             }

自己创建了一个upload的文件,在这个里面进行修改。

三,详细的 讲解

1  <!-- 图片缩略图 -->
2             <dependency>
3                 <groupId>net.coobird</groupId>
4                 <artifactId>thumbnailator</artifactId>
5                 <version>0.4.8</version>
6             </dependency>

3.1,按指定大小把图片进行缩放(会遵循原图高宽比例)

1  //按指定大小把图片进行缩和放(会遵循原图高宽比例)
2         //此处把图片压成400×500的缩略图
3         Thumbnails.of(fromPic).size(400,500).toFile(toPic);//变为400*300,遵循原图比例缩或放到400*某个高度

3.2,按照指定比例进行缩小和放大

1 //按照比例进行缩小和放大
2         Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按比例缩小
3         Thumbnails.of(fromPic).scale(2f);//按比例放大

图片尺寸不变,压缩图片文件大小

1 //图片尺寸不变,压缩图片文件大小outputQuality实现,参数1为最高质量
2         Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);

我这里只使用了 图片尺寸不变,压缩文件大小 源码

  1 /**
  2      *
  3      * @Description:保存图片并且生成缩略图
  4      * @param imageFile 图片文件
  5      * @param request 请求对象
  6      * @param uploadPath 上传目录
  7      * @return
  8      */
  9     public static BaseResult uploadFileAndCreateThumbnail(MultipartFile imageFile,HttpServletRequest request,String uploadPath) {
 10         if(imageFile == null ){
 11             return new BaseResult(false, "imageFile不能为空");
 12         }
 13
 14         if (imageFile.getSize() >= 10*1024*1024)
 15         {
 16             return new BaseResult(false, "文件不能大于10M");
 17         }
 18         String uuid = UUID.randomUUID().toString();
 19
 20         String fileDirectory = CommonDateUtils.date2string(new Date(), CommonDateUtils.YYYY_MM_DD);
 21
 22         //拼接后台文件名称
 23         String pathName = fileDirectory + File.separator + uuid + "."
 24                             + FilenameUtils.getExtension(imageFile.getOriginalFilename());
 25         //构建保存文件路劲
 26         //2016-5-6 yangkang 修改上传路径为服务器上
 27         String realPath = request.getServletContext().getRealPath("uploadPath");
 28         //获取服务器绝对路径 linux 服务器地址  获取当前使用的配置文件配置
 29         //String urlString=PropertiesUtil.getInstance().getSysPro("uploadPath");
 30         //拼接文件路劲
 31         String filePathName = realPath + File.separator + pathName;
 32         log.info("图片上传路径:"+filePathName);
 33         //判断文件保存是否存在
 34         File file = new File(filePathName);
 35         if (file.getParentFile() != null || !file.getParentFile().isDirectory()) {
 36             //创建文件
 37             file.getParentFile().mkdirs();
 38         }
 39
 40         InputStream inputStream = null;
 41         FileOutputStream fileOutputStream = null;
 42         try {
 43             inputStream = imageFile.getInputStream();
 44             fileOutputStream = new FileOutputStream(file);
 45             //写出文件
 46             //2016-05-12 yangkang 改为增加缓存
 47 //            IOUtils.copy(inputStream, fileOutputStream);
 48             byte[] buffer = new byte[2048];
 49             IOUtils.copyLarge(inputStream, fileOutputStream, buffer);
 50             buffer = null;
 51
 52         } catch (IOException e) {
 53             filePathName = null;
 54             return new BaseResult(false, "操作失败", e.getMessage());
 55         } finally {
 56             try {
 57                 if (inputStream != null) {
 58                     inputStream.close();
 59                 }
 60                 if (fileOutputStream != null) {
 61                     fileOutputStream.flush();
 62                     fileOutputStream.close();
 63                 }
 64             } catch (IOException e) {
 65                 filePathName = null;
 66                 return new BaseResult(false, "操作失败", e.getMessage());
 67             }
 68          }
 69
 70
 71         //        String fileId = FastDFSClient.uploadFile(file, filePathName);
 72
 73         /**
 74          * 缩略图begin
 75          */
 76
 77         //拼接后台文件名称
 78         String thumbnailPathName = fileDirectory + File.separator + uuid + "small."
 79                                     + FilenameUtils.getExtension(imageFile.getOriginalFilename());
 80         //added by yangkang 2016-3-30 去掉后缀中包含的.png字符串
 81         if(thumbnailPathName.contains(".png")){
 82             thumbnailPathName = thumbnailPathName.replace(".png", ".jpg");
 83         }
 84         long size = imageFile.getSize();
 85         double scale = 1.0d ;
 86         if(size >= 200*1024){
 87             if(size > 0){
 88                 scale = (200*1024f) / size  ;
 89             }
 90         }
 91
 92
 93         //拼接文件路劲
 94         String thumbnailFilePathName = realPath + File.separator + thumbnailPathName;
 95         try {
 96             //added by chenshun 2016-3-22 注释掉之前长宽的方式,改用大小
 97 //            Thumbnails.of(filePathName).size(width, height).toFile(thumbnailFilePathName);
 98             if(size < 200*1024){
 99                 Thumbnails.of(filePathName).scale(1f).outputFormat("jpg").toFile(thumbnailFilePathName);
100             }else{
101                 Thumbnails.of(filePathName).scale(1f).outputQuality(scale).outputFormat("jpg").toFile(thumbnailFilePathName);
102             }
103
104         } catch (Exception e1) {
105             return new BaseResult(false, "操作失败", e1.getMessage());
106         }
107         /**
108          * 缩略图end
109          */
110
111         Map<String, Object> map = new HashMap<String, Object>();
112         //原图地址
113         map.put("originalUrl", pathName);
114         //缩略图地址
115         map.put("thumbnailUrl", thumbnailPathName);
116         return new BaseResult(true, "操作成功", map);
117     }

获取当前使用的配置文件信息

 1  /**
 2      * 根据key从gzt.properties配置文件获取配置信息
 3      * @param key 键值
 4      * @return
 5      */
 6     public String getSysPro(String key){
 7         return getSysPro(key, null);
 8     }
 9     /**
10      * 根据key从gzt.properties配置文件获取配置信息
11      * @param key 键值
12      * @param defaultValue 默认值
13      * @return
14      */
15     public String getSysPro(String key,String defaultValue){
16         return getValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties", key, defaultValue);
17     }

例:

1 //获取服务器绝对路径 linux 服务器地址
2         String urlString=PropertiesUtil.getInstance().getSysPro("uploadPath");

PropertiesUtil 类

 1 package com.xyz.imageserver.common.properties;
 2
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.InputStreamReader;
 9 import java.util.Properties;
10 import java.util.concurrent.ConcurrentHashMap;
11
12 /**
13  *
14  * @ClassName PropertiesUtil.java
15  * @Description 系统配置工具类
16  * @author caijy
17  * @date 2015年6月9日 上午10:50:38
18  * @version 1.0.0
19  */
20 public class PropertiesUtil {
21     private Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);
22     private ConcurrentHashMap<String, Properties> proMap;
23     private PropertiesUtil() {
24         proMap = new ConcurrentHashMap<String, Properties>();
25     }
26     private static PropertiesUtil instance = new PropertiesUtil();
27
28     /**
29      * 获取单例对象
30      * @return
31      */
32     public static PropertiesUtil getInstance()
33     {
34         return instance;
35     }
36
37     /**
38      * 根据key从gzt.properties配置文件获取配置信息
39      * @param key 键值
40      * @return
41      */
42     public String getSysPro(String key){
43         return getSysPro(key, null);
44     }
45     /**
46      * 根据key从gzt.properties配置文件获取配置信息
47      * @param key 键值
48      * @param defaultValue 默认值
49      * @return
50      */
51     public String getSysPro(String key,String defaultValue){
52         return getValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties", key, defaultValue);
53     }
54     /**
55      * 从配置文件中获取对应key值
56      * @param fileName 配置文件名
57      * @param key   key值
58      * @param defaultValue 默认值
59      * @return
60      */
61     public String getValue(String fileName,String key,String defaultValue){
62         String val = null;
63         Properties properties = proMap.get(fileName);
64         if(properties == null){
65             InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName);
66               try {
67                  properties = new Properties();
68                 properties.load(new InputStreamReader(inputStream,"UTF-8"));
69                 proMap.put(fileName, properties);
70                 val = properties.getProperty(key,defaultValue);
71             } catch (IOException e) {
72                 logger.error("getValue",e);
73             }finally{
74                 try {
75                     if (inputStream != null) {
76                         inputStream.close();
77                     }
78                 } catch (IOException e1) {
79                     logger.error(e1.toString());
80                 }
81             }
82         }else{
83             val = properties.getProperty(key,defaultValue);
84         }
85         return val;
86     }
87 }

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html

图片压缩上传Thumbnailator 插件相关推荐

  1. 写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)

    之前文章已经介绍了 MinIO 的环境搭建,已经对文件的上传下载方法,本篇文章一起与大家来学习图片压缩上传的方法 1.背景 最近客户总抱怨 APP 中图片显示较慢, 升级服务器带宽又没有多的预算.查看 ...

  2. [html] 如何使用html5进行图片压缩上传?

    [html] 如何使用html5进行图片压缩上传? 1.获取到图片的base64格式: 2.图片加载完成后,把图片转化为canvas: 3.使用canvas的toDataURL按照自己的需要进行压缩: ...

  3. js 图片压缩上传(base64位)以及上传类型分类

    一.input file上传类型 1.指明只需要图片 <input type="file" accept='image/*'> 2.指明需要多张图片 <input ...

  4. 前端图片压缩上传(纯js的质量压缩,非长宽压缩)

    前端图片压缩上传(纯js的质量压缩,非长宽压缩) 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> ...

  5. JS 图片压缩上传并在iOS中矫正方向

    JS 图片压缩上传并在iOS中矫正方向 最近在项目中,用到图片上传.如果不进行压缩再上传的话,动辄34兆的图片,上传起来会相当漫长.还有一点就是,在iOS中所拍摄的图片在本地显示是没有问题的,但是上传 ...

  6. web 前端图片优化之--图片压缩上传

    移动前端-图片压缩上传实践  此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传 ...

  7. 基于Plupload的图片压缩上传

    前言 这里的上传工具基于JQuery.Plupload 传送门:Plupload官方.中文文档 为什么要做图片压缩? 现在手机拍照都快10M了,但是有时候图片上传只要看得清楚就可以了,比如上传身份证2 ...

  8. JS前端图片压缩上传

    JS前端图片压缩上传重点知识 最近在做一个手机端的图片上传,写了一个比较符合自己要求的方法,可供参考 在做这个功能模块时,我遇到了以下问题,都花费了大量时间: 1. 不知道怎么压缩图片,(代码和方法) ...

  9. 前端图片压缩上传(压缩篇)

    为什么说这是一篇比较适合小白的前端图片压缩文章呢?因为我也是一个刚工作半年的前端小白,最近接到了一个前端图片压缩上传的任务,通过各种百度博客完成了这项任务,但是任务完成后对各种技术细节却还不是特别理解 ...

最新文章

  1. attribute 'downsample' of type 'NoneType' is not usable in a script method
  2. 【Google Play】Android 应用隐私政策 ( 生成隐私政策 | HTML 隐私政策模板 | Markdown 隐私政策模板 )
  3. 蓝桥杯_算法训练_ALGO12_摆动序列
  4. node 更新_Node.js 15 正式发布,14 将支持到 2023 年
  5. Highcharts隐藏网格线
  6. JavaScript 打印结果时多出一个undefined/出现undefined
  7. 用公式求e^x的近似值
  8. java 中文件outputstream的操作注意
  9. RabbitMQ-Failed to check/redeclare auto-delete queue(s).
  10. Linux命令:grep awk sed详解
  11. layUI table 内容超出宽度怎么换行显示,而不是显示省略号
  12. 世界名着100部简介
  13. 儿童吹泡泡水简单配方_请问儿童吹泡泡液如何制作?
  14. Vue上传多张图片到服务器,数据库存储图片路径并将图片渲染到前端
  15. android 集成支付宝快捷支付 问题 rsa,集成支付宝快捷支付
  16. mp3音频格式在线转换器 在线转换MP3格式
  17. pathon初学入门课
  18. 计算机bios设置论文,玩转电脑必看知识——各种BIOS设置详解 的更多相关文章
  19. mplayer全参数
  20. 在远程linux服务器上用wget命令下载nuscenes数据集出现HTTP request sent, awaiting response... 403 Forbidden错误

热门文章

  1. 初识docker,弄清镜像和容器
  2. opencv python 图像缩放/图像平移/图像旋转/仿射变换/透视变换
  3. 展讯康一:2020年推出5G芯片 第一桶金含金量最高
  4. Rafy 框架 - 幽灵插件(假删除)
  5. Win7下JDK环境变量的设置
  6. JSP PO VO BO DTO POJO DAO解释
  7. 在Extjs中动态增加控件
  8. 【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate
  9. js----与浏览列表有关的对象(浏览器对象)
  10. 页面缓存处理的几种方法