多个文件的预签名网址?

时间:2016-03-31 21:30:46

标签: amazon-web-services amazon-s3 aws-sdk

我已经编写了一个实现,用于为aws-s3上的存储桶生成预先签名的URL。它可以正常工作,用于获取单个文件/对象。

我如何为整个目录生成预先签名的URL?让我们这样说吧,在我的s3存储桶上,有多个文件夹都有自己的小html5应用程序。每个文件夹都有自己的一组html,css,js以及媒体文件。在这种情况下,我不会为单个对象生成预先签名的URL。

如果我为单个文件提供预先签名的URL,例如:文件夹的index.html,该文件也需要加载css,js和media文件。我们没有签名网址的文件。

我不太确定如何实现这个目标。

5 个答案:

答案 0 :(得分:7)

不,他们需要提供一个API,以便您首先上传多个文件。这是API的限制,而不是预签名。

请参阅Is it possible to perform a batch upload to amazon s3?

答案 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 来列出存储桶下的对象,您可以选择所需的对象。