Spring?Boot簡單實現(xiàn)文件上傳功能
前言
- 前端處理 通過form表單來上傳文件
- 提交方式為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>用戶注冊</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)建一個數(shù)據(jù)庫用來保存登錄的用戶名,密碼,文件名
我們可以寫一個工具類:
public class UUIDUtils { public static String createNewUUID(){ String uuid = UUID.randomUUID().toString(); //如果要把uuid的-去掉替換成空字符串 然后需要把32為字符串變成64字符串 uuid = uuid.replace("-", ""); return uuid+uuid; } }
實體類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; /** * 顯示注冊畫面 * @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)建本地文件 //思考文件名,文件名要是唯一的 必須要保證每一個用戶注冊上傳的圖片,文件等,必須保存成唯一的文件名 //Java技術(shù) Java UUID User Unique ID 本身用于給用戶指定唯一的ID,可以用它來產(chǎn)生唯一的隨機字符串 //uuid默認(rèn)返回的是32位字母組成的隨機字符串,重復(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實現(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)備好頁面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)建唯一的字符串 讓這個字符串作為文件名 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)頁上可以把圖片顯示出來 System.out.println("文件存放路徑:"+filePath); return "show.jsp"; } }
不過,我們可以發(fā)現(xiàn),當(dāng)我們點擊提交的時候,圖片還是無法顯示:
@Configuration public class WebConfig implements WebMvcConfigurer { //實現(xiàn)資源的虛擬路徑和物理路徑的映射 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/img/**") .addResourceLocations("file:"+"D:\\springboot\\download\\img\\"); } }
addResourceHandler(“xxx”) 用于指定對外暴露的訪問路徑,addResourceLocations(“xxx”) 用于指定文件放置路徑
到此這篇關(guān)于Spring Boot簡單實現(xiàn)文件上傳功能的文章就介紹到這了,更多相關(guān)Spring Boot文件上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows系統(tǒng)下Java連接SQL Server的方法簡介
這篇文章主要介紹了Windows系統(tǒng)下Java連接SQL Server的方法,分別是JDBC和JTDS的相關(guān)使用,需要的朋友可以參考下2015-09-09MyBatis實現(xiàn)表連接查詢寫法(三種對應(yīng)關(guān)系)的方法總結(jié)
這篇文章主要介紹了MyBatis實現(xiàn)表連接查詢寫法(一對一關(guān)系、一對多關(guān)系、多對多關(guān)系)的方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01Java classloader和namespace詳細(xì)介紹
這篇文章主要介紹了Java classloader和namespace詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03