我有不同的对象产生保存在 S3 中的文件。每个对象调用以下函数来保存文件。
我只有少数对象有以下问题。对象要么总是保存文件,要么永远不能保存文件。
/**
* Upload a file (with metadata).
*
* @param bucketId the id of the bucket
* @param key the key of the file
* @param inputStream the content of the file
* @param metadata the metadata of the file
* @return the eTag of the uploaded file
* @throws IOException If an error occurs during the file upload
*/
public String upload(String bucketId, String key, InputStream inputStream, Map<String, String> metadata) throws IOException {
LOG.info("Upload file {} on bucket {} with metadata: {}", key, bucketId, metadata);
CreateMultipartUploadRequest.Builder builder = CreateMultipartUploadRequest.builder();
if (!this.encryptionAlgorithm.equalsIgnoreCase("none")) {
builder = builder.serverSideEncryption(this.encryptionAlgorithm);
}
CreateMultipartUploadRequest createMultipartUploadRequest = builder.bucket(bucketId)
.key(key)
.metadata(metadata)
.build();
CreateMultipartUploadResponse createMultipartUploadResponse = s3Client.createMultipartUpload(createMultipartUploadRequest);
String uploadId = createMultipartUploadResponse.uploadId();
try {
List<CompletedPart> parts = uploadFileParts(bucketId, key, uploadId, inputStream);
CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder()
.bucket(bucketId)
.key(key)
.uploadId(uploadId)
.multipartUpload(CompletedMultipartUpload.builder().parts(parts).build())
.build();
CompleteMultipartUploadResponse completeMultipartUploadResponse = s3Client.completeMultipartUpload(completeMultipartUploadRequest);
return completeMultipartUploadResponse.eTag();
} catch (Exception e) {
LOG.error("Error while uploading {} multipart {} on bucket {} with metadata {}", key, uploadId, bucketId, metadata, e);
s3Client.abortMultipartUpload(AbortMultipartUploadRequest.builder()
.bucket(bucketId)
.key(key)
.uploadId(uploadId)
.build());
throw e;
}
}
错误是
我们计算的请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅 REST 身份验证和 SOAP 身份验证了解详细信息。(服务:S3,状态码:403,请求 ID:79b6c0a2-0d74-1f30-a4bf-246e9631ccd8,扩展请求 ID:null)
我验证一下,bucket 总是相同的值,输入流数据包含文件的数据。数据成功传输到 S3 存储桶。关键总是喜欢eventsnapshot-21234-7-2021-08-12-1628767690000.jpg
。
你已经有这样的问题了吗?