spring-boot-route(三)實現多檔案上傳
阿新 • • 發佈:2020-10-04
Spring Boot預設上傳的單個檔案大小`1MB`,一次上傳的總檔案大小為`10MB`。
單個檔案上傳使用MultipartFile引數來接收檔案,多檔案使用MultipartFile[]陣列來接收,然後遍歷它,當成單檔案來處理。
**問題一**:如何配置上傳檔案大小限制?
```java
@Configuration
public class FileConfig implements WebMvcConfigurer {
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
// 單個檔案大小
factory.setMaxFileSize(DataSize.parse("10240MB"));
// 上傳的總檔案大小
factory.setMaxRequestSize(DataSize.parse("20480MB"));
return factory.createMultipartConfig();
}
}
```
**思考**:SpringBoot專案推薦使用jar包的方式來執行專案,而實際應用中我們也發現jar包執行專案更加方便。但是當打完jar包後,這個jar的大小就固定好了,上傳的檔案肯定傳不到jar包裡面了。SpringBoot提供了一種方式,將檔案上傳到伺服器物理路徑下,然後做個對映關係,讓圖片可以正常被訪問,具體操作如下:
```java
@Configuration
public class FileConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("file:"+"D://uploadfile/");
}
}
```
> addResourceHandler("/static/**")表示訪問路徑為/static/檔名,addResourceLocations("file:"+"D://uploadfile/")表示檔案儲存的物理路徑,"file:"為固定寫法。
### 檔案上傳後臺實現
```java
@RestController
@Slf4j
public class FileUpload {
@PostMapping("uploadFile")
public List uploadFile(@RequestParam("files") MultipartFile[] files) {
// 儲存上傳成功的檔名,響應給客戶端