Springboot實(shí)現(xiàn)圖片上傳功能的示例代碼
首先對(duì)圖片進(jìn)行UUID 防止圖片被覆蓋以及爬圖
UUID的生成規(guī)則:日期時(shí)間,MAC地址,HashCode,隨機(jī)數(shù)(多種之一)
開發(fā)上傳接口,兩處紅字意思是生成文件夾和生成目標(biāo)文件,
/** * 圖片上傳 * @param httpServletRequest 用來獲取url * @param file 上傳的文件 * @return ApiRestResponse */ @PostMapping("/admin/upload/file") public ApiRestResponse upload(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) { //獲取后綴 String fileName = file.getOriginalFilename(); String suffixName = fileName.substring(fileName.lastIndexOf(".")); //生成文件名稱UUID UUID uuid = UUID.randomUUID(); String newFileName = uuid.toString() + suffixName; //創(chuàng)建文件 File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);//文件夾 File destFile = new File(Constant.FILE_UPLOAD_DIR + newFileName);//目標(biāo)文件 if (!fileDirectory.exists()) { if (!fileDirectory.mkdir()) { throw new SpringLearnException(SpringLearnExceptionEnum.MKDIR_FAILED); } } try { file.transferTo(destFile); } catch (IOException e) { e.printStackTrace(); } try { return ApiRestResponse .success(getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/images/" + newFileName); } catch (URISyntaxException e) { return ApiRestResponse.error(SpringLearnExceptionEnum.UPLOAD_FAILED); } } private URI getHost(URI uri) { URI effectiveURI; try { effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), null, null, null); } catch (URISyntaxException e) { effectiveURI = null; } return effectiveURI; }
由于生成文件時(shí)傳入的時(shí)常量也就是我們生成文件的地址,所以需要去定義常量
/** * 描述: 常量值 * */ @Component public class Constant { public static String FILE_UPLOAD_DIR; @Value("${file.upload.dir}") public void setFileUploadDir(String fileUploadDir) { FILE_UPLOAD_DIR = fileUploadDir; } }
定義好之后去配置文件application.properties中書寫具體保存在哪里[file.upload.dir]與@Vlue里面的值保持一致。
file.upload.dir=D:/pactures/
需要注意幾個(gè)點(diǎn)
由于常量是static,我們直接將注解加載常量上方是無法找到我們定義的文件地址的
看到我們有一個(gè)地方是null,點(diǎn)擊藍(lán)字 可以看出確實(shí)是沒找到我們的文件夾。
所以我們應(yīng)當(dāng)在下方新寫一個(gè)方法去寫常量的值,并將@Value("${file.upload.dir}")注解加在方法上方,并且我們需要在類上加@Component注解。
現(xiàn)在我們就能上傳圖片了,我們先去文件夾中看一下
文件生成功,我們?cè)購(gòu)?fù)制url去網(wǎng)頁(yè)上看一下
這是因?yàn)樗@個(gè)url地址不能映射到我們的本地目錄,我們?nèi)ヅ渲肧pringBootWebMvcConfig
就能打開了
/** * 描述: 配置地址映射 */ @Configuration public class SpringLearnWebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/images/**") .addResourceLocations("file:" + Constant.FILE_UPLOAD_DIR);//把url地址映射到本地目錄 } }
到此這篇關(guān)于Springboot實(shí)現(xiàn)圖片上傳功能的示例代碼的文章就介紹到這了,更多相關(guān)Springboot圖片上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ Idea SpringBoot 數(shù)據(jù)庫(kù)增刪改查實(shí)例詳解
SpringBoot 是 SpringMVC 的升級(jí),對(duì)于編碼、配置、部署和監(jiān)控,更加簡(jiǎn)單。這篇文章主要介紹了IntelliJ Idea SpringBoot 數(shù)據(jù)庫(kù)增刪改查實(shí)例,需要的朋友可以參考下2018-02-02java 發(fā)送帶Basic Auth認(rèn)證的http post請(qǐng)求實(shí)例代碼
下面小編就為大家?guī)硪黄猨ava 發(fā)送帶Basic Auth認(rèn)證的http post請(qǐng)求實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11elasticsearch元數(shù)據(jù)構(gòu)建metadata及routing類源碼分析
這篇文章主要為大家介紹了elasticsearch元數(shù)據(jù)構(gòu)建metadata?routing類內(nèi)部源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Spring中@Async注解實(shí)現(xiàn)異步調(diào)詳解
在本篇文章里小編給大家分享的是關(guān)于Spring中@Async注解實(shí)現(xiàn)異步調(diào)詳解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-04-04Java的RxJava庫(kù)操作符的用法及實(shí)例講解
RxJava由于提供異步和基于事件的支持在Android開發(fā)者中獲得了不少人氣,這里我們就來看一下Java的RxJava庫(kù)操作符的用法及實(shí)例講解,需要的朋友可以參考下2016-06-06SpringBoot工程中Spring Security應(yīng)用實(shí)踐記錄流程分析
Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。這篇文章主要介紹了SpringBoot工程中Spring Security應(yīng)用實(shí)踐,需要的朋友可以參考下2021-09-09Jersey Restful接口如何獲取參數(shù)的問題
這篇文章主要介紹了Jersey Restful接口如何獲取參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06