SpringBoot上传文件

在application.yml配置文件中配置上传路径和文件限制大小

spring:
   servlet:
      multipart:
        max-file-size: 10KB 
upload:
   file:
      location: D:\upload\

官方提供的可配置项:

# MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0 # Threshold after which files are written to disk. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.max-request-size=10MB # Max request size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.
官网路径:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-multipart-file-upload-configuration

创建上传请求的Controller

首先在Controller中使用@Value注解获取到上传文件的保存路径

@Value("${upload.file.location}")
private String uploadLocation;

然后写请求方法

    @PostMapping(value = "/upload")
    public ResponseEntity<?> upload(HttpServletRequest reqquest, @RequestParam("file") MultipartFile file) {
		try {
			 if (file.isEmpty()) {
				 return new ResponseEntity<String>("文件为空", HttpStatus.ACCEPTED);
		     }

			//String uploadDir = ResourceUtils.getURL("classpath:").getPath();
			//String uploadDir = reqquest.getSession().getServletContext().getRealPath("/")+"upload\\";
			String uploadDir = uploadLocation;
			File dir = new File(uploadDir);
			if(!dir.exists()) {
				dir.mkdirs();
			}
			String filename = file.getOriginalFilename();
			File serverFile = new File(uploadDir + filename);
			file.transferTo(serverFile);
			return new ResponseEntity<String>("上传成功", HttpStatus.OK);
		} catch (IllegalStateException e) {
			e.printStackTrace();
			return new ResponseEntity<String>("上传失败", HttpStatus.ACCEPTED);
		} catch (IOException e) {
			e.printStackTrace();
			return new ResponseEntity<String>("上传失败", HttpStatus.ACCEPTED);
		}
	}
此处要注意一点就是@RequestParam("file")中的file必须与HTML上传input的name属性一致,如

<form action="upload" method="post" enctype="multipart/form-data">
        <p>选择文件: <input type="file" name="file"/></p>
        <p><input type="submit" value="提交"/></p>
</form>
如果需要自定义保存的文件名,加入如下代码即可:

String suffix = filename.substring(filename.lastIndexOf("."));
String defineName = UUID.randomUUID() + suffix;

上传多个文件
    @PostMapping(value = "/uploads")
    public ResponseEntity<?> uploads(HttpServletRequest reqquest, @RequestParam("file") MultipartFile[] files) {
		
		//String uploadDir = ResourceUtils.getURL("classpath:").getPath();
		//String uploadDir = reqquest.getSession().getServletContext().getRealPath("/")+"upload\\";
		String uploadDir = uploadLocation;
		File dir = new File(uploadDir);
		if(!dir.exists()) {
			dir.mkdirs();
		}
		for(int i=0;i<files.length;i++) {
			if(files[i] != null) {
				MultipartFile file = files[i];
				String filename = file.getOriginalFilename();
				String suffix = filename.substring(filename.lastIndexOf("."));
				String defineName = UUID.randomUUID() + suffix;
				File serverFile = new File(uploadDir + defineName);
				try {
					file.transferTo(serverFile);
				} catch (IllegalStateException e) {
					e.printStackTrace();
					return new ResponseEntity<String>("上传第"+i+"个文件失败", HttpStatus.ACCEPTED);
				} catch (IOException e) {
					e.printStackTrace();
					return new ResponseEntity<String>("上传第"+i+"个文件失败", HttpStatus.ACCEPTED);
				}
			}
		}
		return new ResponseEntity<String>("上传成功", HttpStatus.OK);		
	}



猜你喜欢

转载自blog.csdn.net/h363659487/article/details/79033676