使用MultipartFile實(shí)現(xiàn)文件上傳功能
前言
MultipartFile是spring類(lèi)型,代表HTML中form data方式上傳的文件,包含二進(jìn)制數(shù)據(jù)+文件名稱(chēng)。
在文件上傳這方面能幫助我們快速簡(jiǎn)潔實(shí)現(xiàn)。
使用
1、yml配置文件
spring:
servlet:
multipart:
max-file-size: 10MB #單個(gè)最大文件大小,默認(rèn)是1MB
max-request-size: 100MB #總請(qǐng)求文件大小
2、API介紹
multipartFile.getContentType()//在控制臺(tái)打印文件的類(lèi)型
multipartFile.getName()//返回文件的名稱(chēng)
multipartFile.getOriginalFilename()//返回文件的原文件名
multipartFile.getSize() //單位為字節(jié)
multipartFile.getInputStream() //文件轉(zhuǎn)換為輸入流
multipartFile.transferTo(new File("D:/"));
/*上傳的文件需要保存的路徑和文件名稱(chēng),
本質(zhì)上還是使用了流,只不過(guò)是封裝了步驟,相當(dāng)于:
File file = new File("D:/");
file.createNewFile();
FileOutputStream stream = new FileOutputStream(file);
stream.write(multipartFile.getBytes());
stream.close();
*/
3、文件上傳示例
@RestController
@Slf4j
public class UploadTest {
@RequestMapping("/upload")
public String upLoad(@RequestPart("file") MultipartFile multipartFile){
log.info("文件上傳開(kāi)始");
log.info("文件{}",multipartFile.getOriginalFilename());
if (!multipartFile.isEmpty()){
try {
//上傳的文件需要保存的路徑和文件名稱(chēng),路徑需要存在,否則報(bào)錯(cuò)
multipartFile.transferTo(new File("D:/"++multipartFile.getOriginalFilename()));
} catch (IllegalStateException | IOException e){
e.printStackTrace();
return "上傳失敗";
}
} else {
return "請(qǐng)上傳文件";
}
return "上傳成功";
}
}
注意:
@RequestPart("file")主要用來(lái)處理content-type為 multipart/form-data 或 multipart/mixed stream 發(fā)起的請(qǐng)求,可以獲取請(qǐng)求中的參數(shù)。
因此在此處,前端上傳文件時(shí),key為file,value為文件。
4、postman測(cè)試
由于本人只會(huì)后端不會(huì)做前端,懶得查資料寫(xiě)前端上傳文件功能,就使用postman進(jìn)行測(cè)試。
1、將請(qǐng)求方式改為post。
2、Headers中設(shè)置設(shè)置key=Content-Type,value=multipart/form-data(默認(rèn)已設(shè)置)。

3、在Body中選擇form-data,選擇File格式,KEY填寫(xiě)在后端代碼中編寫(xiě)的@RequestPart(“file”)中的file,value選擇你想要上傳的文件。

4、點(diǎn)擊send即可實(shí)現(xiàn)上傳功能。
文件下載
既然文件上傳功能有了,就在此介紹一下如何實(shí)現(xiàn)文件下載功能。
@RestController
public class DownTest {
@RequestMapping("/download")
public ResponseEntity<Object> download() throws IOException {
//提供下載的文件的路徑
FileSystemResource file = new FileSystemResource("D:\\cloud/pom.xml");
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
//這里定制下載文件的名稱(chēng)
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getFilename()));
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.contentLength())
.contentType(MediaType.parseMediaType("application/octet-stream"))//以二進(jìn)制流的形式返回
.body(new InputStreamResource(file.getInputStream()));
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
RestTemplate請(qǐng)求失敗自動(dòng)重啟機(jī)制精講
這篇文章主要為大家介紹了RestTemplate請(qǐng)求失敗自定義處理的方法,自動(dòng)重試的機(jī)制精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多所進(jìn)步,早日升職加薪2022-03-03
SpringBoot實(shí)現(xiàn)文件上傳并返回url鏈接的示例代碼
文件上傳,當(dāng)我們選擇了某一個(gè)圖片文件之后,這個(gè)文件就會(huì)上傳到服務(wù)器,從而完成文件上傳的操作,是指將本地圖片、視頻、音頻等文件上傳到服務(wù)器,供其他用戶(hù)瀏覽或下載的過(guò)程,本文給大家介紹了SpringBoot實(shí)現(xiàn)文件上傳并返回url鏈接,需要的朋友可以參考下2024-11-11
JAVAEE Filter 過(guò)濾器設(shè)置是否緩存實(shí)例詳解
網(wǎng)頁(yè)中,每次的客戶(hù)端訪問(wèn)服務(wù)器,有部分不用重復(fù)請(qǐng)求的,這樣可以減輕服務(wù)器的工作量。那么如何設(shè)置客戶(hù)端是否都緩存呢?接下來(lái)通過(guò)本文給大家介紹JAVAEE Filter 過(guò)濾器設(shè)置是否緩存的實(shí)例,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
30分鐘入門(mén)Java8之默認(rèn)方法和靜態(tài)接口方法學(xué)習(xí)
這篇文章主要介紹了30分鐘入門(mén)Java8之默認(rèn)方法和靜態(tài)接口方法學(xué)習(xí),詳細(xì)介紹了默認(rèn)方法和接口,有興趣的可以了解一下。2017-04-04
springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由
這篇文章主要介紹了springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringBoot @JsonDeserialize自定義Json序列化方式
這篇文章主要介紹了SpringBoot @JsonDeserialize自定義Json序列化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
java調(diào)用opencv身份證號(hào)識(shí)別詳解
這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實(shí)現(xiàn)身份證號(hào)的識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03

