Spring?Boot簡(jiǎn)單實(shí)現(xiàn)文件上傳功能
前言
- 前端處理 通過(guò)form表單來(lái)上傳文件
- 提交方式為post
- enctype格式為"multipart/form-data"
- input類型為file
- name屬性必須和Controller中方法的形參名稱一致
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>用戶注冊(cè)</h2> <form action="/register" method="post" enctype="multipart/form-data"> 用戶名:<input type="text" name="username"><br><br> 密碼 :<input type="password" name="password"><br><br> 頭像 :<input type="file" name="uploadFile"><br><br> <input type="submit" value="提交"> </form> </body> </html>
后端處理
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)用來(lái)保存登錄的用戶名,密碼,文件名
我們可以寫一個(gè)工具類:
public class UUIDUtils { public static String createNewUUID(){ String uuid = UUID.randomUUID().toString(); //如果要把uuid的-去掉替換成空字符串 然后需要把32為字符串變成64字符串 uuid = uuid.replace("-", ""); return uuid+uuid; } }
實(shí)體類User:
@Data public class User { private Integer id; private String username; private String password; private String filename; }
Controller:
@Controller public class UserController { @Autowired private UserService userService; /** * 顯示注冊(cè)畫面 * @return */ @RequestMapping("/show") public String show(){ return "/page/register.html"; } @PostMapping("/register") public String register(User user, @RequestParam("uploadFile") MultipartFile uploadFile){ System.out.println("用戶:"+user); System.out.println("文件:"+uploadFile); //創(chuàng)建本地文件 //思考文件名,文件名要是唯一的 必須要保證每一個(gè)用戶注冊(cè)上傳的圖片,文件等,必須保存成唯一的文件名 //Java技術(shù) Java UUID User Unique ID 本身用于給用戶指定唯一的ID,可以用它來(lái)產(chǎn)生唯一的隨機(jī)字符串 //uuid默認(rèn)返回的是32位字母組成的隨機(jī)字符串,重復(fù)的概率幾乎為0 //創(chuàng)建唯一文件名 String fileName= UUIDUtils.createNewUUID(); //我們需要文件的后綴也應(yīng)該不是寫死的,前端上傳的后綴是啥,我們保存的就是什么 //獲取原生文件的文件名 String originalFilename = uploadFile.getOriginalFilename(); System.out.println(originalFilename); //創(chuàng)建文件的后綴名 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); //創(chuàng)建新的文件路徑 String filePath=fileName+suffix; File srcFile = new File("D:/springboot/download/img/"+filePath); try { //把前端傳送的文件保存在本地中 uploadFile.transferTo(srcFile); } catch (IOException e) { e.printStackTrace(); } user.setFilename(filePath); try { userService.register(user); } catch (Exception e) { e.printStackTrace(); } return ""; } }
Service
public interface UserService { void register(User user) throws Exception; }
Service實(shí)現(xiàn)類
@Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void register(User user) throws Exception { userMapper.insert(user); } }
Mapper
@Mapper public interface UserMapper { @Insert("insert into user values(default,#{username},#{password},#{filename})") void insert(User user); }
物理路徑和虛擬路徑映射
先準(zhǔn)備好頁(yè)面jsp
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>文件的上傳</h2> <form action="/file/upload" method="post" enctype="multipart/form-data"> 文件上傳:<input type="file" name="uploadFile"> <input type="submit" value="提交"> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <img src="/img/${filePath}">圖像</img> 路徑:${filePath} </body> </html>
編寫Controller
@Controller @RequestMapping("/file") public class FileUploadController { /** * 顯示畫面 * @return */ @RequestMapping("/show") public String show(){ return "file.jsp"; } @RequestMapping(value = "/upload",method = RequestMethod.POST) public String fileUpload(MultipartFile uploadFile, HttpSession session){ //利用uuid創(chuàng)建唯一的字符串 讓這個(gè)字符串作為文件名 String fileName = UUIDUtils.createNewUUID(); //獲取上傳文件的文件名 String originalFilename = uploadFile.getOriginalFilename(); //獲取后綴名 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); //創(chuàng)建文件保存路徑 String filePath=fileName+suffix; File srcFile=new File("D:/springboot/download/img/"+filePath); //把前端文件保存在本地 try { uploadFile.transferTo(srcFile); //把文件存放在本地的文件路徑保存在session域中 session.setAttribute("filePath", filePath); } catch (IOException e) { e.printStackTrace(); } //我們希望網(wǎng)頁(yè)上可以把圖片顯示出來(lái) System.out.println("文件存放路徑:"+filePath); return "show.jsp"; } }
不過(guò),我們可以發(fā)現(xiàn),當(dāng)我們點(diǎn)擊提交的時(shí)候,圖片還是無(wú)法顯示:
@Configuration public class WebConfig implements WebMvcConfigurer { //實(shí)現(xiàn)資源的虛擬路徑和物理路徑的映射 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/img/**") .addResourceLocations("file:"+"D:\\springboot\\download\\img\\"); } }
addResourceHandler(“xxx”) 用于指定對(duì)外暴露的訪問(wèn)路徑,addResourceLocations(“xxx”) 用于指定文件放置路徑
到此這篇關(guān)于Spring Boot簡(jiǎn)單實(shí)現(xiàn)文件上傳功能的文章就介紹到這了,更多相關(guān)Spring Boot文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot大文件上傳、分片上傳、斷點(diǎn)續(xù)傳、秒傳的實(shí)現(xiàn)
- Springboot上傳文件時(shí)提示405問(wèn)題及排坑過(guò)程
- SpringBoot實(shí)現(xiàn)文件上傳與下載功能的示例代碼
- SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟記錄
- Java全面深入探究SpringBoot攔截器與文件上傳
- SpringBoot上傳文件大小受限問(wèn)題的解決辦法
- SpringBoot整合MinIO實(shí)現(xiàn)文件上傳的方法詳解
- springboot如何配置上傳文件的maxRequestSize
相關(guān)文章
Windows系統(tǒng)下Java連接SQL Server的方法簡(jiǎn)介
這篇文章主要介紹了Windows系統(tǒng)下Java連接SQL Server的方法,分別是JDBC和JTDS的相關(guān)使用,需要的朋友可以參考下2015-09-09MyBatis實(shí)現(xiàn)表連接查詢寫法(三種對(duì)應(yīng)關(guān)系)的方法總結(jié)
這篇文章主要介紹了MyBatis實(shí)現(xiàn)表連接查詢寫法(一對(duì)一關(guān)系、一對(duì)多關(guān)系、多對(duì)多關(guān)系)的方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01解決Spring Security 用戶帳號(hào)已被鎖定問(wèn)題
這篇文章主要介紹了解決Spring Security 用戶帳號(hào)已被鎖定問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01解決idea每次新建項(xiàng)目都需要重新指定maven目錄
這篇文章主要介紹了解決idea每次新建項(xiàng)目都需要配置maven,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09在Java中FreeMarker?模板來(lái)定義字符串模板
這篇文章主要介紹了在Java中FreeMarker?模板來(lái)定義字符串模板,文章基于Java的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-04-04Java classloader和namespace詳細(xì)介紹
這篇文章主要介紹了Java classloader和namespace詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03