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()); //新文件名以u(píng)uid為名 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對(duì)象,新地址新名稱 原上傳圖片所需 //File newFile=new File(realPath,fileUUID+"."+fileEnd); //上傳圖片時(shí)對(duì)圖片按照16:9的比例壓縮240*135 //讀取圖片 BufferedInputStream in = new BufferedInputStream(uploadFile.getInputStream()); //字節(jié)流轉(zhuǎn)圖片對(duì)象 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)文章
Spring Boot詳細(xì)打印啟動(dòng)時(shí)異常堆棧信息詳析
這篇文章主要給大家介紹了關(guān)于Spring Boot詳細(xì)打印啟動(dòng)時(shí)異常堆棧信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10java圖形化界面實(shí)現(xiàn)簡(jiǎn)單混合運(yùn)算計(jì)算器的示例代碼
這篇文章主要介紹了java圖形化界面實(shí)現(xiàn)簡(jiǎn)單混合運(yùn)算計(jì)算器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11詳解Java中的字節(jié)碼增強(qiáng)技術(shù)
字節(jié)碼增強(qiáng)技術(shù)就是一類對(duì)現(xiàn)有字節(jié)碼進(jìn)行修改或者動(dòng)態(tài)生成全新字節(jié)碼文件的技術(shù)。本文將通過示例詳細(xì)說說Java的字節(jié)碼增強(qiáng)技術(shù),需要的可以參考一下2022-10-10Java?jar打包成exe應(yīng)用程序的詳細(xì)步驟
本文主要介紹了Java?jar打包成exe應(yīng)用程序的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Netty源碼分析NioEventLoop執(zhí)行select操作入口
這篇文章主要介紹了Netty源碼分析NioEventLoop執(zhí)行select操作入口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03MyBatis-Plus 如何實(shí)現(xiàn)連表查詢的示例代碼
這篇文章主要介紹了MyBatis-Plus 如何實(shí)現(xiàn)連表查詢的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08SSL證書部署+SpringBoot實(shí)現(xiàn)HTTPS安全訪問的操作方法
文章介紹了SSL和HTTPS的工作原理,包括握手階段和安全數(shù)據(jù)傳輸階段,通過模擬HTTPS請(qǐng)求,展示了如何生成自簽名證書并配置Spring Boot應(yīng)用程序以支持HTTPS,總結(jié)指出,SSL和HTTPS對(duì)于保護(hù)網(wǎng)絡(luò)安全至關(guān)重要,感興趣的朋友一起看看吧2025-02-02