如何在Rails中获取AWS-S3复制对象的URL

时间:2019-01-15 16:34:24

标签: ruby-on-rails amazon-web-services amazon-s3 aws-sdk

我想使用aws-sdk gem(版本3)将文件从一个文件夹复制到同一存储桶中的另一个文件夹。我能够成功复制文件。

代码如下 控制器:

PrefabUtitlity.InstantiatePrefab

ps:不用理会source_key和path,因为我已经使用了载波。 我如何获得复制对象的路径/ URL。我需要网址,因为如果在复制后删除源存储桶中的文件,则目的地必须独立拥有副本。并且可以通过url访问该文件。 这是obj在命令行中的输出

,到期时间=无,copy_source_version_id = nil,version_id = nil,server_side_encryption =“ AES256”,sse_customer_algorithm = nil,sse_customer_key_md5 = nil,ssekms_key_id = nil,request_charged = nil>

任何帮助都是很好的TIA。

更新:

    saved_file = path for the source file   
    source_bucket_name = 'bucket-name'
    target_bucket_name = 'same as source bucket'
    source_key = "#{saved_file.path.path}"
     target_key = "path of the target"       
     s3 = Aws::S3::Client.new(credentials)
     byebug
  obj = s3.copy_object({bucket: target_bucket_name, copy_source: source_bucket_name + '/' + source_key, key: target_key})

使用该URL来查看/访问复制的对象。 这对我有用。

1 个答案:

答案 0 :(得分:0)

对象URL只是存储区URL +文件名,因此您已经有了所需的信息。如果需要,您也可以generate a public URLpre-signed URL

还请记住,复制对象不会复制访问控制策略。因此,您可能没有访问权限,因为您尚未为新对象定义权限。 https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#copy_from-instance_method