SpringBoot 文件上傳、下載、設置大小
阿新 • • 發佈:2018-07-04
study catch mat filesize http stack action output 1.4
本文使用SpringBoot的版本為2.0.3.RELEASE
1.上傳單個文件
①html對應的提交表單
<form action="uploadFile" method="post" enctype="multipart/form-data">
<p>選擇文件: <input type="file" name="fileName"/></p>
<p><input type="submit" value="提交"/></p>
</form>
②Boot中的處理代碼。這裏要註意
@RequestMapping("/uploadFile") 對應 action="uploadFile"
@RequestParam("fileName") 對應 name="fileName"
@RequestMapping("/uploadFile")
@ResponseBody
public String uploadFile(@RequestParam("fileName") MultipartFile file) {
//判斷文件是否為空
if (file.isEmpty()) {
return "-1";
}
String fileName = file.getOriginalFilename();
//加個時間戳,盡量避免文件名稱重復
String path = "D:/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + fileName;
File dest = new File(path);
//判斷文件是否已經存在
if (dest.exists()) {
return "-2";
}
//判斷文件父目錄是否存在
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdir();
}
try {
file.transferTo(dest); //保存文件
} catch (IOException e) {
return "-3";
}
return "0";
}
2.上傳多個文件
①html對應的提交表單
<form action="uploadMultifile" method="post" enctype="multipart/form-data" >
<p>選擇文件1: <input type="file" name="fileName"/></p>
<p>選擇文件2: <input type="file" name="fileName"/></p>
<p>選擇文件3: <input type="file" name="fileName"/></p>
<p><input type="submit" value="提交"/></p>
</form>
②Boot中的處理代碼。
@RequestMapping("/uploadMultifile")
@ResponseBody
public String keywordSubmitFile(@RequestParam("fileName") List<MultipartFile> files) {
for (MultipartFile file : files) {
//這裏簡單輸出文件名稱
System.out.println(file.getOriginalFilename());
}
return "0";
}
3.下載文件
@RequestMapping("/downloadFile")
@ResponseBody
public String downloadFile(HttpServletResponse response, @RequestParam("fileName") String filePathName) {
File file = new File(filePathName);
if (!file.exists()) {
return "-1";
}
response.reset();
response.setHeader("Content-Disposition", "attachment;fileName=" + filePathName);
try {
InputStream inStream = new FileInputStream(filePathName);
OutputStream os = response.getOutputStream();
byte[] buff = new byte[1024];
int len = -1;
while ((len = inStream.read(buff)) > 0) {
os.write(buff, 0, len);
}
os.flush();
os.close();
inStream.close();
} catch (Exception e) {
e.printStackTrace();
return "-2";
}
return "0";
}
4.設置上傳下載文件大小
①根據不同版本,對應的設置值不一樣
Spring Boot 1.3.x and earlier
multipart.maxFileSize
multipart.maxRequestSize
Spring Boot 1.4.x and 1.5.x
spring.http.multipart.maxFileSize
spring.http.multipart.maxRequestSize
Spring Boot 2.x
spring.servlet.multipart.maxFileSize
spring.servlet.multipart.maxRequestSize
②比如在2.x的版本,則在項目的application.properties文件中設置30MB大小
spring.servlet.multipart.maxFileSize=30MB
spring.servlet.multipart.maxRequestSize=30MB
如果不限制大小,則設置為-1即可
spring.servlet.multipart.maxFileSize=-1
spring.servlet.multipart.maxRequestSize=-1
參考:
《Spring Boot入門——文件上傳與下載》
《I am trying to set maxFileSize but it is not honored》
以上。
SpringBoot 文件上傳、下載、設置大小