Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用预签名 URL 上传对象 (适用于 Ruby 的 AWS 开发工具包)

以下任务引导您通过 Ruby 脚本使用任一适用于 Ruby 的开发工具包版本和预签名 URL 来上传对象。

使用适用于 Ruby 的 AWS 开发工具包 - 版本 2

以下任务引导您通过 Ruby 脚本使用适用于 Ruby 的开发工具包 - 版本 2 和预签名 URL 来上传对象。

上传对象 - 适用于 Ruby 的开发工具包 - 版本 2

1

创建 Aws::S3::Resource 类的实例。

2

通过调用 Aws::S3::Resource 类实例的 #bucket[]#object[] 方法,提供存储桶名称和对象键。

通过创建 URI 类的实例生成预签名 URL,然后使用它分析 .presigned_url 类实例的 Aws::S3::Resource 方法。您必须将 :put 指定为 .presigned_url 的参数,如果需要上传对象,必须向 Net::HTTP::Session#send_request 指定 PUT

3

任何拥有预签名 URL 的人都可以上传对象。

上传将创建对象或将任何现有的对象替换为预签名 URL 中指定的相同键值。

下面的 Ruby 代码示例演示用适用于 Ruby 的开发工具包 - 版本 2 实现的上述任务。

Copy
#Uploading an object using a pre-signed URL for 适用于 Ruby 的开发工具包 - Version 2. require 'aws-sdk-resources' require 'net/http' s3 = Aws::S3::Resource.new(region:'us-west-2') obj = s3.bucket('BucketName').object('KeyName') # Replace BucketName with the name of your bucket. # Replace KeyName with the name of the object you are creating or replacing. url = URI.parse(obj.presigned_url(:put)) body = "Hello World!" # This is the contents of your object. In this case, it's a simple string. Net::HTTP.start(url.host) do |http| http.send_request("PUT", url.request_uri, body, { # This is required, or Net::HTTP will add a default unsigned content-type. "content-type" => "", }) end puts obj.get.body.read # This will print out the contents of your object to the terminal window.

使用适用于 Ruby 的 AWS 开发工具包 - 版本 1

上传对象 - 适用于 Ruby 的开发工具包 - 版本 1

1

创建 AWS:S3 类的实例。

2

通过调用 AWS::S3::S3Object 类实例的 #bucket[]#object[] 方法,提供存储桶名称和对象键。

通过调用 AWS::S3 类实例的 .url_for 方法生成预签名 URL。您必须将 :put 指定为 .url_for 的参数,如果需要上传对象,必须向 Net::HTTP::Session#send_request 指定 PUT

3

任何拥有预签名 URL 的人都可以上传对象。

上传将创建对象或将任何现有的对象替换为预签名 URL 中指定的相同键值。

下面的 Ruby 代码示例演示用适用于 Ruby 的 AWS 开发工具包 - 版本 1 实现的上述任务。

Copy
#Uploading an object using a pre-signed URL for 适用于 Ruby 的开发工具包 - Version 1. require 'aws-sdk-v1' require 'net/http' s3 = AWS::S3.new(region:'us-west-2') obj = s3.buckets['BucketName'].objects['KeyName'] # Replace BucketName with the name of your bucket. # Replace KeyName with the name of the object you are creating or replacing. url = obj.url_for(:write, :content_type => "text/plain") body = "Hello World!" # This is the contents of your object. In this case, it's a simple string. Net::HTTP.start(url.host) do |http| http.send_request("PUT", url.request_uri, body, {"content-type" => "text/plain",}) # The content-type must be specified in the pre-signed url. end puts obj.read # This will print out the contents of your object to the terminal window. puts obj.content_type # This will print out the content type of your object to the terminal window.