AWS Ruby SDK CORE:将文件上传到S3

sla*_*fer 3 ruby amazon-s3 amazon-web-services

我想使用AWS-SDK-CORE ruby​​ SDK将文件(任何文件,可能是.txt,.mp4,.mp3,.zip,.tar ......等)上传到AWS S3

这是我的代码:

require 'aws-sdk-core'
Aws.config = {
  :access_key_id => MY_ACCESS_KEY
  :secret_access_key => MY_SECRET_KEY,
  :region => 'us-west-2'
}

s3 = Aws::S3.new
resp = s3.put_object(
  :bucket => "mybucket",
  :key => "myfolder/upload_me.sql",
  :body => "./upload_me.sql"
)
Run Code Online (Sandbox Code Playgroud)

现在,上面的代码运行并创建一个myfolder/upload_me.sql只写了一行的键,./upload_me.sql哪个是错的.该文件upload_me.sql有几行.

预期的行为是将文件上传到upload_me.sqlS3上mybucket/myfolder/upload_me.sql.但它只是写了一行mybucket/myfolder/upload_me.sql,就是这样./upload_me.sql

现在,如果我省略如下:body部分:

s3 = Aws::S3.new
resp = s3.put_object(
  :bucket => "mybucket",
  :key => "myfolder/upload_me.sql",
)
Run Code Online (Sandbox Code Playgroud)

然后它只是创建并清空所谓的mybucket/myfolder/upload_me.sql甚至无法下载的密钥(好吧,即使它被下载,也没用)

你能指出我哪里出错吗?

以下是方法的ruby-SDK-core文档put_object:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/V20060301.html#put_object-instance_method

更新: 如果我尝试使用AWS-CLI上传相同的文件,它就会上传得很好.这是命令:

aws s3api put-object --bucket mybucket --key myfolder/upload_me.sql --body ./upload_me.sql
Run Code Online (Sandbox Code Playgroud)

sla*_*fer 8

所以,在htis问题上度过一个令人沮丧的星期天下午之后,我终于破解了它.我真正需要的是:body => IO.read("./upload_me.sql")

所以我的代码如下所示:

s3 = Aws::S3.new
resp = s3.put_object(
  :bucket => "mybucket",
  :key => "myfolder/upload_me.sql",
  :body => IO.read("./upload_me.sql")
)
Run Code Online (Sandbox Code Playgroud)