场景:我有一个 spring boot 端点,提交的 XML 文件很少,并且发生了一些操作。为了提高性能,讨论了不要每次都上传文件(提交),而是存储在平台中(第一次提交期间)。然后,下一次,用户不需要提交文件,而是从缓存中检索。但是,我需要以下建议:
@PostMapping(path = "/endpoint")
public ResponseEntity<byte[]> fileUpload(
@RequestParam(name ="A",required = false) MultipartFile multipartfile1,
@RequestParam(name ="B",required = false) MultipartFile multipartfile2,
@RequestParam(name ="C",required = false) MultipartFile multipartfile3,
@RequestParam(name ="D",required = false) MultipartFile multipartfile4,
@RequestParam(name ="E",required = false) MultipartFile multipartfile5,
@RequestParam(name ="F",required = false) MultipartFile multipartfile6,
@RequestParam(name ="G",required = false) MultipartFile multipartfile7)
throws IOException {
ResponseEntity<byte[]> resp = null;
try {
MultipartFile[] files = {multipartfile1, multipartfile2, multipartfile3, multipartfile4,
multipartfile5, multipartfile6, multipartfile7};
checkifEmptyAndUpdateTheArray(files); //here fails. I want to extract the file present in cache
DateTime start = DateTime.now();
//storing files
nodesetService.storeNodeSet(files); //able to store the files
log.warn("Start: {}", start);
}catch (Exception e) {
log.error("Unexpected exception: ", e);
return createErrorJSONResponse(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
}
失败:从第二次开始,我没有向端点提交任何文件,文件数组为空,我只能使用缓存中的名称检索文件。
private void checkifEmptyAndUpdateTheArray(MultipartFile[] files) {
Arrays.asList(files).stream().forEach(file->{
if(file==null) {
MultipartFile storedFile = nodesetService.getStoredNodeSet(file); //fails here
if(!storedFile.isEmpty()) {
Arrays.asList(files).set(Arrays.asList(files).indexOf(file), storedFile);
}
else {
log.error("NodeSet is absent in the cache");
}
}
});
NodeSetService.java:
public MultipartFile getStoredNodeSet(MultipartFile file) {
Filter invFilter = new Filter();
invFilter.byType(file.getName()); // possibility to extract file from cache. But fails as file is null
return null;
任何建议如何处理这种情况?