springboot-上傳單檔案、多檔案
阿新 • • 發佈:2018-12-14
今天通過springboot實現上傳功能時遇到的以下問題
1.檔案上傳大小受到限制
網上很多都是新增spring.http.mutipart,但是yml會報deprecated configuration property...的錯誤,意思就是過時了。
spring:
servlet:
multipart:
enabled: true
max-file-size: 1024mb
max-request-size: 1024mb
第二種方式是通過新增配置類的方式
@SpringBootApplication //宣告被註解標註的類是springboot的入口類 @MapperScan(value = "com.testspringboot.mapper") @Configuration public class TestspringbootApplication { public static void main(String[] args) { SpringApplication.run(TestspringbootApplication.class, args); } @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //單個檔案最大 factory.setMaxFileSize("5MB"); /// 設定總上傳資料總大小 factory.setMaxRequestSize("50MB"); return factory.createMultipartConfig(); } }
通過@Configuration與@bean註解的方法實現。
2.多檔案上傳時一次性選擇多個問題
一次性選擇多個檔案就是在input type ="file”標籤中新增 multiple。
<form method="POST" enctype="multipart/form-data" action="/upload/testuploadimgs"> <p>檔案1:<input type="file" name="file" multiple/></p> <p><input type="submit" value="上傳" /></p> </form>
下面是我的程式碼:考慮到要經常上傳所以將上傳的方法封裝到一個工具類中。
工具類:
public class FileUtil { /** * 第一步:判斷檔案是否為空 true:返回提示為空資訊 false:執行第二步 * 第二步:判斷目錄是否存在 不存在:建立目錄 * 第三部:通過輸出流將檔案寫入硬碟資料夾並關閉流 * @param file * @return */ public static String uploadFile(MultipartFile file){ String fileName = file.getOriginalFilename(); String filePath = "D:\\repository\\"; File targetFile = new File(filePath); //第一步:判斷檔案是否為空 if(file.isEmpty())return fileName+"檔案為空"; //第二步:判斷目錄是否存在 不存在:建立目錄 if(!targetFile.exists()){ targetFile.mkdirs(); } //第三部:通過輸出流將檔案寫入硬碟資料夾並關閉流 BufferedOutputStream stream = null; try { stream = new BufferedOutputStream(new FileOutputStream(filePath+fileName)); stream.write(file.getBytes()); stream.flush(); }catch (IOException e){ e.printStackTrace(); }finally { try { if (stream != null) stream.close(); } catch (IOException e) { e.printStackTrace(); } } return fileName+"上傳成功"; } }
controller層程式碼:
//處理檔案上傳
@RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
String info = null;
try {
info = FileUtil.uploadFile(file);
} catch (Exception e) {
e.printStackTrace();
}
return info;
}
//處理多檔案上傳
@RequestMapping(value="/testuploadimgs", method = RequestMethod.POST)
@ResponseBody
public String multipleFilesUpload(HttpServletRequest request){
//獲取上傳的檔案陣列
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
//遍歷處理檔案
String info = null;
for (MultipartFile file:files) {
try {
String s = FileUtil.uploadFile(file);
info = info+"-"+s;
} catch (Exception e) {
e.printStackTrace();
}
}
return info;
}