我想使用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"
)
现在,上面的代码运行并创建了一个名为
myfolder/upload_me.sql
的密钥,其中只写了一行,即./upload_me.sql
,这是错误的。文件upload_me.sql
有几行内容。期望的行为是将文件
upload_me.sql
上传到S3作为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",
)
然后它只创建一个名为mybucket/myfolder/upload_me.sql
的空键,甚至无法下载(即使它被下载,也是无用的)
您能指出我错在哪里吗?
这是put_object
方法的ruby-SDK-core文档: 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
require 'aws-sdk'
。我正在使用更新的ruby AWS-SDK-CORE,它需要require 'aws-sdk-core'
。此外,旧版SDK将对象定义为AWS::S3.new
,而新版SDK将对象定义为Aws::S3.new
。对于非文本文件,使用“File.read”的第一种解决方案可能无法正常工作。感谢您的时间。 - slayedbylucifer