为了解决这个问题,需要确保创建S3 pre-signed post URL时使用的AWS凭证是正确的。可以通过检查AWS access key id和secret access key来验证凭证是否正确。此外,还需要确保正确设置S3 bucket policy,以允许生成的pre-signed URL可以上传文件到S3 bucket。
以下是示例代码,展示如何使用AWS SDK for Java来创建S3 pre-signed post URL并进行文件上传:
//指定S3 bucket名称和文件名称
String bucketName = "my-bucket";
String objectKey = "my-object.txt";
//指定上传时生成的临时凭证有效期
Date expiration = new Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += 1000 * 60 * 10; //10分钟
expiration.setTime(expTimeMillis);
//创建S3 pre-signed post URL请求
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(bucketName, objectKey)
.withMethod(HttpMethod.POST)
.withExpiration(expiration);
//设置上传时所需的额外参数
FormUploader.Builder uploader = FormUploader.builder()
.withBucketName(bucketName)
.withKey(objectKey)
.withRegion(Regions.US_WEST_2)
.withFields(new HashMap())
.withFile(new File("path/to/local/file"));
//生成pre-signed URL
PresignedPost presignedPost = s3client.createPresignedPost(generatePresignedUrlRequest, uploader.build());
//上传文件到S3
s3client.upload(presignedPost.getBucketName(), presignedPost.getKey(), new File("path/to/local/file"), presignedPost.getFields(), presignedPost.getSignature());
请注意,要使用上面的代码示例,您需要替换以下变量和值: