gpt4 book ai didi

AWS S3 Python 客户端的 Java 等效项 "generate_presigned_post"

转载 作者:行者123 更新时间:2023-11-30 05:35:26 29 4
gpt4 key购买 nike

在Python boto3库中,有一个名为generate_presigned_post的方法,可以使用POST创建一个预签名URL来上传文件。我在 Java 中没有看到等效的东西,因为可用的东西(“GeneratePresignedUrlRequest”)仅支持:GET、PUT、DELETE、HEAD。

想知道我是否遗漏了一些东西,或者人们是否可以想出一种方法,通过用 Java 编写我自己的generatePresignedPost 来做到这一点?

我正在 Java 中构建一个服务,我想返回一个预签名 URl,允许将多个文件上传到 S3 中的特定存储桶/ key 前缀。

我首先用 Python 做了一些原型(prototype)设计以了解更多信息,并得到了这段代码:

bucket_name = "my-bucket"
key = "test/${filename}"
expires_in = 24*60*60 # 1 day

s3_client = # Initialize Boto S3 Client with Credentials

response = s3_client.generate_presigned_post(bucket_name, key, ExpiresIn=expires_in)

print(response['url'])
print(response['fields'])

(我知道“${filename}”被转换为“start-width”条件)

GeneratePresignedUrlRequest 的 Java 版本仅允许创建 PUT 预签名 URL,不允许我像 POST 版本那样设置“条件”。这就是为什么我希望在 Java 中获得一个generate_presigned_post 等效项。

Python 代码最终创建了一个如下所示的请求:

fields = {'key': 'test/${filename}'}
conditions = [{'bucket': 'my-bucket'}, ['starts-with', '$key', 'test/']]
request_dict = {'url_path': '/my-bucket', 'query_string': {}, 'method': 'PUT', 'headers': {}, 'body': b'', 'url': 'https://s3.us-west-2.amazonaws.com/my-bucket', 'context': {'is_presign_request': True, 'use_global_endpoint': True}}

返回的内容如下:

response['url'] = 'https://my-bucket.s3.amazonaws.com/'
response['fields'] = {'key': 'test/${filename}', 'AWSAccessKeyId': 'ACCESS_KEY', 'x-amz-security-token': 'SECURITY_TOKEN', 'policy': 'VERY_LONG_POLICY', 'signature': 'SIGNATURE'}

最佳答案

您可以使用以下代码片段

GeneratePresignedUrlRequest generatePresignedUrlRequest = 
new GeneratePresignedUrlRequest(bucketName, objectKey)
.withMethod(HttpMethod.POST)
.withExpiration(expiration);
URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

您可以查看here完整的 Java 源代码

关于AWS S3 Python 客户端的 Java 等效项 "generate_presigned_post",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56740596/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com