我已经编写了一个实现,用于为aws-s3上的存储桶生成预先签名的URL。它可以正常工作,用于获取单个文件/对象。
我如何为整个目录生成预先签名的URL?让我们这样说吧,在我的s3存储桶上,有多个文件夹都有自己的小html5应用程序。每个文件夹都有自己的一组html,css,js以及媒体文件。在这种情况下,我不会为单个对象生成预先签名的URL。
如果我为单个文件提供预先签名的URL,例如:文件夹的index.html,该文件也需要加载css,js和media文件。我们没有签名网址的文件。
我不太确定如何实现这个目标。
答案 0 :(得分:7)
不,他们需要提供一个API,以便您首先上传多个文件。这是API的限制,而不是预签名。
答案 1 :(得分:2)
没有。预签名URL仅对一个对象有效。
答案 2 :(得分:2)
这是绝对可能的,而且已经存在多年了。生成预签名 URL 时必须使用 conditions
,特别是 starts-with
。请参阅官方Amazon Documentation。
举个例子,这里是使用 Boto3 生成预签名 POST url 的 Python:
response = s3.generate_presigned_post(
"BUCKET_NAME",
"uploads/${filename}",
Fields=None,
Conditions=[["starts-with", "$key", "uploads/"]],
ExpiresIn=(10 * 60),
)
答案 3 :(得分:1)
首先要做的事情:
AWS S3是一个键值存储,每个对象if (elt == mode) ...
只是一个名称。没有"文件夹"的概念。 (即使您可能会错误地认为它们存在于UI中)。
为多个"文件创建一个预先签名的网址"你必须做一些预处理。在本地拉出所有必要的文件,压缩它们并将zip存档放在S3上,然后生成zip存档的预签名URL。
答案 4 :(得分:0)
这将为 S3 上的现有对象生成一个预先签名的 URL。在您的情况下,您可以列出所有对象(使用 keyName)并递归调用上述方法。
public String generatePreSignedUrl(String bucketName, String keyName){
Date expiration = new Date();
long mSec = 60000l; //Time in millis
expiration.setTime(mSec);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, keyName);
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);
URL url = s3.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString();
}
PS:AWS SDK 提供 API 来列出存储桶下的对象,您可以选择所需的对象。