Amazon S3通过Ruby SDK中的URL获取S3对象

vshtjzan  于 2023-03-17  发布在  Ruby
关注(0)|答案(2)|浏览(177)

我希望重命名(或移动)我的S3对象,它们的URL类似于https://s3.eu-west-2.amazonaws.com/sample-bucket/temp/sample-picture.jpg
在Ruby SDK中有没有标准的方法可以只通过URL获取Aws::S3::Object,或者我必须通过正则表达式来解析它?
在Java SDK中有AmazonS3URI.java

f87krz0w

f87krz0w1#

我还没有找到任何方法可以直接从s3的url中获取对象,最后只能自己解析了。

b4lqfgs4

b4lqfgs42#

不支持,AWS SDK for Ruby v2-3不支持此功能。
不过,这里有一小段代码可以实现这个目的(它松散地基于您引用的Java代码):

require 'aws-sdk-s3'

# @param uri [String] your fully-qualified URL
# @return head_object [Aws::S3::Types::HeadObjectOutput] metadata on object
def from_uri(uri)

    # Parse the S3 URL into its bucket and object key components
    uri = URI.parse(s3_url)
    bucket_name = uri.host.split('.')[0]
    object_key = uri.path[1..-1] # Remove leading slash

    client = Aws::S3::Client.new

    client.head_object({
        bucket: bucket_name, 
        key: object_key, 
    })

data = from_uri("https://s3.eu-west-2.amazonaws.com/sample-bucket/temp/sample-picture.jpg")
puts data.to_h

您可能希望将此方法转换为一个类,并将客户机示例化提取到类init中,但这回答了您的问题。
另请注意:HEAD操作从对象中检索元数据,而不返回对象本身。

相关问题