У меня возникли проблемы с моим методом putObject S3 с пружинным бэкэндом, с загрузкой нескольких частей и асинхронным вызовом S3 весной.
Вот мой контроллер: сервисный метод:
public S3ResponseObj uploadTos3( MultipartFile file, S3MultiPartUploadRequest uploadRequest ) {
if(!validateFile(file)){
throw new S3FileInvalidException("Not a valid Image File");
}
String filePath = uploadRequest.getIdentifier()+SLASH+System.currentTimeMillis()+SLASH+uploadRequest.getFileName();
utilClass.s3UploadService(file,uploadRequest.getPrefix(),filePath);
return new S3ResponseObj(String.format(S3_BASE_LINK, bucketName, uploadRequest.getPrefix(),filePath));
}
Асинхронный метод для выполнения последнего вызова метода putObject.
@Async
public void s3UploadService( MultipartFile file, String prefix, String filePath){
Long contentLength = Long.valueOf(file.getSize());
log.info("content length : {}", contentLength);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(contentLength);
log.info("s3 upload beginning : {}", System.currentTimeMillis());
try{
PutObjectResult result = s3client.putObject(bucketName,prefix+SLASH+filePath,
file.getInputStream(), metadata);
log.info("s3 upload success : {}", System.currentTimeMillis());
} catch(IOException e){
e.printStackTrace();
}
}
С помощью этого асинхронного вызова мы видели, что иногда составной файл недоступен, или размер файла становится 0.
Нам нужно сделать асинхронный вызов S3, если это не правильный способ, и что мне делать?