第一步:寫html文件
<form action="/uplode" method="post" enctype="multipart/form-data">姓名:<input type="text" name="username"><br>年齡:<input type="text" name="age"><br>頭像:<input type="file" name="image"><br><input type="subsit" value="提交">
</form>
這上面這個html代碼,里面可以上傳一個頭像的文件?
如果是上傳文件的話,需要注意的是,提交方式必須是post =》 method=“post”。 后面的 enctype(提交表單時使用何種編碼類型)這個的類型必須為?multipart/form-data =》?enctype=“multipart/form-data” , 這個才會將整個文件給傳送到后端去,如果使用的是默認的編碼類型,傳輸的則是文件的名稱
必須注意上面的這兩點
第二步:java本地儲存
先看代碼
@PostMapping("/upload")
public Result upload(String username, Integer age,MultipartFile image) throws Exception{log.info("文件上傳:{},{},{}",username, age, image);// 獲取原始文件名 - 1.jpg 1.2.3.jpgString originalFilename = image.getOriginalFilename(); //getName()。這個方法獲取的是表單項的名字// 構造唯一的文件名(不能重復) --uuid(通用唯一識別碼)int index = originalFilename.lastIndexOf("."); // 獲取到的是最后一個點所處在的位置String extname = originalFilename.substring(index); //直接截取到文件的后綴名String newFileName = UUID.randomUUID().toString() + extname;log.info("獲取到的新的文件名:{}", newFileName);// 將文件儲存到服務器的磁盤目錄中。E:\imageimage.transferTo(new File("E:\\image\\"+newFileName));return Result.success();
}
上面的代碼中,首先用MultipartFile對象去接受從網頁傳來的文件數據對象,獲取到原始的文件名,保存在指定的路徑之上,我們用uuid來做唯一標識,來作為文件名.其中后綴名用字符串中的一些方法獲取.
但是文件最大傳輸大小問1M,那該怎么辦呢?
可以在配置中配置如下配置
# 配置單個文件最大上傳大小
spring.servlet.multipart.max-file-size=10MB
# 配置單個請求最大上傳大小(一次請求可以上傳多個文件)
spring.servlet.multipart.max-request-size=100MB