public void upload(MultipartFile multipartFile, boolean publicAccess) {
String fileName = this.generateUniqueFilename(multipartFile);
try {
File file = new File(Objects.requireNonNull(fileName));
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write(multipartFile.getBytes());
outputStream.close();
PutObjectRequest request = new PutObjectRequest(this.awsS3UploadBucket, fileName, file);
if (publicAccess) {
request.withCannedAcl(CannedAccessControlList.PublicRead);
}
this.amazonS3.putObject(request);
} catch (Exception exception) {
logger.error("error [" + exception.getMessage() + "] occurred while uploading [" + fileName + "] ");
}
}
generateUniqueFilename
генерирует уникальное имя для загруженного файла. Например 143119066552807424.png
.
Когда код запускается, я получил это исключение
error [The request signature we calculated does not match the signature you provided. Check your key and signing method.
(Service: Amazon S3; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: XXX; S3 Extended Request ID: XXXX)] occurred while uploading [143119066552807424.png]
Я провел небольшое исследование в Google, но не нашел ресурса, который объяснял бы, как я могу правильно подписать запрос. Кто-нибудь может объяснить, почему этот код не работает?