Springboot實現(xiàn)圖片上傳功能的示例代碼
首先對圖片進行UUID 防止圖片被覆蓋以及爬圖
UUID的生成規(guī)則:日期時間,MAC地址,HashCode,隨機數(shù)(多種之一)
開發(fā)上傳接口,兩處紅字意思是生成文件夾和生成目標文件,
/** * 圖片上傳 * @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);//目標文件 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; }
由于生成文件時傳入的時常量也就是我們生成文件的地址,所以需要去定義常量
/** * 描述: 常量值 * */ @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/
需要注意幾個點
由于常量是static,我們直接將注解加載常量上方是無法找到我們定義的文件地址的
看到我們有一個地方是null,點擊藍字 可以看出確實是沒找到我們的文件夾。
所以我們應(yīng)當在下方新寫一個方法去寫常量的值,并將@Value("${file.upload.dir}")注解加在方法上方,并且我們需要在類上加@Component注解。
現(xiàn)在我們就能上傳圖片了,我們先去文件夾中看一下
文件生成功,我們再復制url去網(wǎng)頁上看一下
這是因為它這個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實現(xiàn)圖片上傳功能的示例代碼的文章就介紹到這了,更多相關(guān)Springboot圖片上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ Idea SpringBoot 數(shù)據(jù)庫增刪改查實例詳解
SpringBoot 是 SpringMVC 的升級,對于編碼、配置、部署和監(jiān)控,更加簡單。這篇文章主要介紹了IntelliJ Idea SpringBoot 數(shù)據(jù)庫增刪改查實例,需要的朋友可以參考下2018-02-02java 發(fā)送帶Basic Auth認證的http post請求實例代碼
下面小編就為大家?guī)硪黄猨ava 發(fā)送帶Basic Auth認證的http post請求實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11elasticsearch元數(shù)據(jù)構(gòu)建metadata及routing類源碼分析
這篇文章主要為大家介紹了elasticsearch元數(shù)據(jù)構(gòu)建metadata?routing類內(nèi)部源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04Spring中@Async注解實現(xiàn)異步調(diào)詳解
在本篇文章里小編給大家分享的是關(guān)于Spring中@Async注解實現(xiàn)異步調(diào)詳解內(nèi)容,需要的朋友們可以學習下。2020-04-04SpringBoot工程中Spring Security應(yīng)用實踐記錄流程分析
Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。這篇文章主要介紹了SpringBoot工程中Spring Security應(yīng)用實踐,需要的朋友可以參考下2021-09-09Jersey Restful接口如何獲取參數(shù)的問題
這篇文章主要介紹了Jersey Restful接口如何獲取參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06