图片压缩上传Thumbnailator 插件
生活随笔
收集整理的這篇文章主要介紹了
图片压缩上传Thumbnailator 插件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
假如你現在還在為自己的技術擔憂,假如你現在想提升自己的工資,假如你想在職場上獲得更多的話語權,假如你想順利的度過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 插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何恢复master数据库
- 下一篇: 【No.7 C++对象的构造与析构时间】