SpringBoot使用MultipartFile类上传文件到minio,@Async异步处理报文件不存在异常
时间: 2023-05-30 12:07:17 浏览: 501
在使用@Async异步处理上传文件时,可能会遇到文件不存在的异常。这是由于异步处理会在上传文件完成之前就返回,导致文件还未上传完成,异步处理就已经开始了。
解决方法是使用CompletableFuture类来等待文件上传完成后再处理,示例代码如下:
```
@Service
public class FileService {
@Autowired
private MinioClient minioClient;
@Async
public CompletableFuture<String> uploadFile(MultipartFile file, String bucketName, String objectName) {
try {
minioClient.putObject(bucketName, objectName, file.getInputStream(), file.getContentType());
return CompletableFuture.completedFuture("File uploaded successfully");
} catch (Exception e) {
return CompletableFuture.failedFuture(e);
}
}
public String handleFileUpload(MultipartFile file) throws Exception {
String bucketName = "my-bucket";
String objectName = file.getOriginalFilename();
CompletableFuture<String> future = uploadFile(file, bucketName, objectName);
future.thenAccept(result -> {
// 处理上传文件成功的逻辑
}).exceptionally(ex -> {
// 处理上传文件失败的逻辑
return null;
}).join();
return "File upload started";
}
}
```
在handleFileUpload方法中,先调用uploadFile方法上传文件,然后使用CompletableFuture类等待文件上传完成后再进行处理。在future.thenAccept方法中处理上传文件成功的逻辑,在future.exceptionally方法中处理上传文件失败的逻辑。最后调用join方法等待异步处理完成。
阅读全文