我希望能够向客户提供“签名”的URL,这样只有在24小时内才有效(例如)。 但是,我不想为每个生成的URL调用S3:
AWS::S3::S3Object.new(bucket, name).url_for(:read, :secure => true, :expires => expires_in).to_s
相反,我想自己生成URL(我有文件名和存储桶链接,可以自己构建URL)。
但是,我想在存储桶级别上对URL进行签名(比如说一天只签名一次给定存储桶中的所有文件)。这个可行吗?
我希望能够向客户提供“签名”的URL,这样只有在24小时内才有效(例如)。 但是,我不想为每个生成的URL调用S3:
AWS::S3::S3Object.new(bucket, name).url_for(:read, :secure => true, :expires => expires_in).to_s
相反,我想自己生成URL(我有文件名和存储桶链接,可以自己构建URL)。
但是,我想在存储桶级别上对URL进行签名(比如说一天只签名一次给定存储桶中的所有文件)。这个可行吗?
抱歉,我没有 Ruby 代码,只有 Java...
但是你将无法获取整个存储桶的预签名 URL,只能获取每个文件的 URL。
这是我创建的函数。它会为您打印所有内容。这个过程有意义吗?
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()));
}