我希望能够将客户端的URL提供给签名的#34;所以,仅与24小时有关(例如)。 但是,我不想为生成的每个网址调用S3:
AWS::S3::S3Object.new(bucket, name).url_for(:read, :secure => true, :expires => expires_in).to_s
相反,我想自己生成URL(我有文件名和存储桶链接,我可以自己构建)。
但是,我想在桶级别对URL进行签名(例如,对于给定存储桶中的所有文件,每天一次)。这有可能吗?
答案 0 :(得分:3)
创建预签名网址时,完全在本地完成。你可以自己做#34;但是使用SDK要容易得多,并且没有实际的差异。看到没有"签署" S3 API上的行动。
但是,您无法在"存储桶级别"上签名,因为每个对象都会检查签名。我认为签署一个整桶是不可行的。
答案 1 :(得分:0)
抱歉,我没有这个只有Java的ruby代码...
但是你无法获得整个存储桶的预分配网址,只能获得每个文件。
这是我创建的功能。这将为您打印一切。这个过程有意义吗?
private static URI GetURL(AmazonS3Client amazonS3Client, S3ObjectSummary s3ObjectSummary) throws URISyntaxException {
return amazonS3Client.generatePresignedUrl(
new GeneratePresignedUrlRequest(s3ObjectSummary.getBucketName(), s3ObjectSummary.getKey())
.withMethod(HttpMethod.GET)
.withExpiration(GetExperation())).toURI();
}
public static void run(String accessKey, String secretKey, String bucketName) {
AmazonS3Client amazonS3Client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey));
amazonS3Client.listObjects(bucketName)
.getObjectSummaries()
.stream()
.forEach(s3ObjectSummary
-> System.out.println(GetURL(amazonS3Client, s3ObjectSummary).toString()));
}