Spring Boot 上傳文件

Spring Boot 上傳文件

依賴jar

pom.xml

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

java

@RestController
@RequestMapping
public class UploadController {
    
     @RequestMapping(value = "/uploadDelta.do")
  @ResponseBody
  public Map<String, Object> updateDelta(MultipartFile file) {
    Map<String, Object> result = new HashMap<String, Object>();

    String rootFilePath = uploadpath;

    //文件最後保存的目錄
    String path_save =
        "/" + paramer.getProjectId() + "/" + deltaEntity.getId() + "/";/**文件保存路徑(沒有文件名稱)**/
    String saveFilePath = rootFilePath + path_save;
    File allPathFile = new File(saveFilePath);
    if (!allPathFile.exists()) {
      allPathFile.mkdirs();
      logger.info("創建文件夾,路徑:" + allPathFile);
    }

    Map<String, String> map = new HashMap<String, String>();

    String fileName = paramer.getFile().getOriginalFilename(); //獲取文件名
    String[] fileNameSplit = fileName.split("\\.");//獲取文件拓展名
    String compress = fileNameSplit[fileNameSplit.length - 1];

    String randomFilename = UUID.randomUUID().toString() + "." + compress;
    File destFile = new File(saveFilePath + randomFilename);//隨機生成的文件名

    logger.info("文件保存路徑:" + saveFilePath + randomFilename);

    try {//文件寫入硬盤
      paramer.getFile().transferTo(new File(saveFilePath + randomFilename));
    } catch (Exception e) {
      e.printStackTrace();
      logger.error("文件保存到硬盤失敗");
      result.put("status", ResultParams.PROJECT_FAIL_STATUS);
      result.put("msg", "文件上傳失敗");
      return result;
    }

   
    return null;
  }
}

大文件上傳異常

spring boot 限制一次表單提交總共文件的最大大小爲10MB,每一個文件的大小爲1MB.

MultipartProperties

private String maxFileSize = "1Mb";
private String maxRequestSize = "10Mb";
    

解決方法

  1. 直接通過配置文件解決

application.properties

spring.http.multipart.max-request-size=1024MB 
# 大小設置爲1G
spring.http.multipart.max-file-size=1024MB
# 大小設置爲1G
  1. 通過代碼層級修改文件上傳大小限制
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;


@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setDefaultEncoding("UTF-8");
    resolver.setResolveLazily(true);//resolveLazily屬性啓用是爲了推遲文件解析,以在在UploadAction中捕獲文件大小異常
    resolver.setMaxInMemorySize(40960);
    resolver.setMaxUploadSize(500 * 1024 * 1024);//上傳文件大小 50M 50*1024*1024
    return resolver;
}

在spring boot 1.5.4版本中可以直接通過 @Bean("multipartResolver") 進行注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章