springMVC?MultipartFile上傳圖片時(shí)如何修改圖片大小
引言
服務(wù)器配置比較低,打開網(wǎng)站時(shí)加載1MB+的圖片 速度很慢,影響客戶體驗(yàn)。
所以從網(wǎng)上找了java修改圖片大小的方法,這里記錄一下 以備以后不時(shí)之需。
我這里設(shè)置的是寬240,,高135 按照16:9的比例設(shè)置。
修改之后的圖片大小在100kb左右
16:9的比例其他參數(shù):
3840×2160 2560X1440 1920×1080 1600×900 1366×768 1280×720 1024×576
960×540 854×480 720×405 640×360 480×270 320×180
代碼
@RequestMapping("/admin/fileUpload")
@ResponseBody
public Map<String, Object> fileUpload(HttpServletRequest request,
@RequestParam("uploadFile") MultipartFile uploadFile){
Map<String, Object> map = new HashMap<String, Object>();
try {
//原文件名后綴
String fileEnd = FilenameUtils.getExtension(uploadFile.getOriginalFilename());
//新文件名以uuid為名
String fileUUID = CommonsUtil.getUUID();
//獲取當(dāng)前項(xiàng)目部署的地址,也可以直接指定路徑,D://blogFile//xx.jpg
//String realPath = request.getSession().getServletContext().getRealPath("http://blogFile//"+TimeUtil.curYearMonthDay());
String realPath = "C://blogFile//"+TimeUtil.curYearMonthDay();
File dirs=new File(realPath);
if(!dirs.exists()){//判斷文件夾是否存在
System.out.println("文件夾不存在,進(jìn)行創(chuàng)建。");
dirs.mkdirs();//不存在就創(chuàng)建
}
//創(chuàng)建file對象,新地址新名稱 原上傳圖片所需
//File newFile=new File(realPath,fileUUID+"."+fileEnd);
//上傳圖片時(shí)對圖片按照16:9的比例壓縮240*135
//讀取圖片
BufferedInputStream in = new BufferedInputStream(uploadFile.getInputStream());
//字節(jié)流轉(zhuǎn)圖片對象
Image bi =ImageIO.read(in);
//構(gòu)建圖片流 按照16:9的比例 設(shè)置寬高 240*135
//寬240 高135 我這里直接寫死了 也可以寫成參數(shù)形式的。
BufferedImage tag = new BufferedImage(240, 135, BufferedImage.TYPE_INT_RGB);
//繪制改變尺寸后的圖
tag.getGraphics().drawImage(bi, 0, 0, 240, 135, null);
//輸出流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(realPath+"http://"+fileUUID+"."+fileEnd));
ImageIO.write(tag, fileEnd,out);
in.close();
out.close();
//原上傳圖片方法
//uploadFile.transferTo(newFile);
//FileUtils.copyInputStreamToFile(uploadFile.getInputStream(), newFile);//第二種原上傳圖片方法
System.out.println("圖片地址:"+realPath+"http://"+fileUUID+"."+fileEnd);
map.put("sign", "success");
} catch (Exception e) {
e.printStackTrace();
map.put("sign", "error");
map.put("msg", e.toString());
}
return map;
}一點(diǎn)小建議
因?yàn)閖ava是跨語言 所以路徑符最好使用/
- 在java中路徑一般用"/"
- windows中的路徑一般用"\"
- linux、unix中的路徑一般用"/"
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC中MultipartFile轉(zhuǎn)File的兩種方式
在spring上傳文件中,一般都使用了MultipartFile來接收,但是有需要用到File的地方,本文主要介紹了SpringMVC中MultipartFile轉(zhuǎn)File的兩種方式,感興趣的可以了解一下2022-04-04
SpringBoot生產(chǎn)環(huán)境和測試環(huán)境配置分離的教程詳解
這篇文章主要介紹了SpringBoot生產(chǎn)環(huán)境和測試環(huán)境配置分離的教程詳解,需要的朋友可以參考下2020-08-08
MyBatis中resultType和resultMap的用法及說明
MyBatis通過resultType和resultMap將SQL查詢結(jié)果映射為Java對象,resultType適用于簡單類型或完全匹配的Java類,resultMap則用于處理列名和屬性名不一致的情況2025-12-12
Java應(yīng)用程序CPU100%問題排查優(yōu)化實(shí)戰(zhàn)
這篇文章主要介紹了如何排查和優(yōu)化Java應(yīng)用程序CPU使用率達(dá)到100%的問題,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2025-02-02

