我使用Spring Initializr创建了一个Spring Boot 2演示应用程序,并添加了以下控制器:
@Controller
@RequestMapping("/demo")
public class UploadController {
private final static Logger LOG = LoggerFactory.getLogger(UploadController.class);
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(
@RequestParam("metadata") MultipartFile metadata,
@RequestParam("payload") MultipartFile payload) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Map metadataMap = mapper.readValue(metadata.getInputStream(), Map.class);
LOG.info("Received call to upload file {}", metadataMap.get("filename"));
LOG.info("File size: {}", payload.getBytes().length);
LOG.info("File {} successfully uploaded", metadataMap.get("filename"));
return ResponseEntity.ok().build();
}
}
我随后添加了一个包含以下配置的application.yaml文件:
spring:
servlet:
multipart:
max-file-size: 2000000MB
max-request-size: 2000000MB
resolve-lazily: true
我的目标是让控制器在开始读取payload文件之前解析和记录metadata文件,但是resolve-lazily设置似乎被Boot忽略了:控制器内部的代码直到整个body被读取才会执行。
我使用以下命令测试控制器:
curl -F metadata=@metadata.json -F payload=@payload.bin http://localhost:8080/demo/upload
我的代码/配置有什么问题吗?我对设置的含义有没有理解正确?
find $(ls -part -d /tmp/* |grep /tomcat. |grep -v '\-docbase.' |tail --lines=1) -type f |xargs --no-run-if-empty ls -lparS -h
- Brent Bradburn