解决S3预签名url的7天有效期限制

问题

使用S3的V4版本签名,预签名URL有效期最高只有7天,如果要设置超过7天的有效期,则需要修改签名版本,具体设置方法如下

S3 Java SDK

只需要在构建client的时候,调用config.setSignerOverride("S3SignerType")方法设置签名版本,完整代码如下:

import java.net.URL;
import java.util.Date;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.HttpMethod;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;

public class PresignUrl {

    AmazonS3 s3;
    
    PresignUrl(String accessKey, String secretKey, String endpoint, String region) {
        ClientConfiguration config = new ClientConfiguration();

        // S3SignerType: 使用v2版本签名,url有效期支持2年
        // AWSS3V4SignerType: 使用v4版本签名,url有效期最大支持7天
        config.setSignerOverride("S3SignerType");

        AwsClientBuilder.EndpointConfiguration endpointConfig = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
        AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
        AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
        this.s3 = AmazonS3Client.builder()
                .withEndpointConfiguration(endpointConfig)
                .withClientConfiguration(config)
                .withCredentials(awsCredentialsProvider)
                .disableChunkedEncoding()
                .withPathStyleAccessEnabled(true)
                .build();
    }
    public URL generatePresignUrl(String bucketName, String keyName, HttpMethod method, Date expiration) {
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, keyName)
                .withMethod(method)
                .withExpiration(expiration);
        return this.s3.generatePresignedUrl(request);
    }
    static public void main(String [ ]str) {
        final String accessKey = "";
        final String secretKey = "";
        final String endpoint = "http://s3.cn-north-1.jdcloud-oss.com";
        final String region = "cn-north-1";
        final String bucketName = "BUCKET";
        final String keyName = "Object";
        final HttpMethod method = HttpMethod.GET;  //此处设置您的PresignUrl允许的HTTP方法
        final Integer expireInSeconds = 704800;  //此处设置您的PresignUrl有效的时间段,以秒为单位
        final Date expiration = new Date(System.currentTimeMillis() + expireInSeconds * 1000);
        URL url = new PresignUrl(accessKey, secretKey, endpoint, region).generatePresignUrl(bucketName, keyName, method, expiration);
        System.out.println("Pre-Signed URL: " + url);
    }
}

S3 Python SDK

import boto3
from botocore.client import Config

# 账号ak/sk
ACCESS_KEY = ''
SECRET_KEY = ''

endpoint = 'https://s3.cn-north-1.jdcloud-oss.com'

s3 = boto3.client(
    's3',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    # signature_version:s3: 使用v2版本签名
    # signature_version:s3v4:使用v4版本签名
    config=Config(signature_version='s3',s3={'addressing_style': 'path'}),
    endpoint_url=endpoint
)

print(s3.generate_presigned_url(ClientMethod='get_object', Params={'Bucket': 'BUCKET', 'Key': 'Object'},ExpiresIn=704800))
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
S3C6410 是一款由三星公司推出的嵌入式微处理器,广泛应用于各种移动设备中。该处理器的驱动程序用于与操作系统进行通信,确保设备和操作系统能够正常协同工作。 在 S3C6410 处理器上安装 Windows 7 64 位操作系统后,需要相应的驱动程序来识别和管理处理器上的硬件设备。驱动程序通常是由设备制造商开发并提供的,以确保设备能够与操作系统相互匹配,实现最佳的兼容性和性能。 要获取适用于 S3C6410 处理器的 Windows 7 64 位驱动程序,您可以按照以下步骤操作: 1. 确定您的设备型号和规格。搜索三星官方网站或其他可靠的驱动下载网站,以查找适用于 S3C6410 处理器的 Windows 7 64 位驱动程序。 2. 在驱动程序下载页面中,选择与您的操作系统和设备型号相匹配的驱动程序版本。 3. 下载驱动程序并保存在计算机的任意位置。 4. 双击驱动程序安装文件,按照提示进行安装。在安装过程中可能需要提供管理员权限。 5. 安装完成后,重新启动计算机以使驱动程序生效。 请注意,驱动程序的安装可能因设备型号和供应商而有所不同。在任何情况下,请确保从官方渠道下载驱动程序以确保其正版和可信赖。 总结:安装 S3C6410 处理器的 Windows 7 64 位驱动程序是为了设备和操作系统之间的兼容性和协同工作。通过按照设备型号,在官方网站或其他可靠的驱动下载网站搜索并下载适用的驱动程序,然后按照提示进行安装和配置,即可实现设备和操作系统的正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值