我想使用AWS-SDK-CORE ruby SDKAWS Ruby SDK CORE:将文件上传到S3
将文件(任何文件,可能是.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
有几行。
预期的行为是上传S3上的文件upload_me.sql
作为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
方法红宝石SDK-核心文档:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/V20060301.html#put_object-instance_method
UPDATE: 如果我尝试上传使用AWS-CLI同一个文件,它被上传的罚款。这里是命令:
aws s3api put-object --bucket mybucket --key myfolder/upload_me.sql --body ./upload_me.sql
的'另一种方式去做这个'是针对[适用于ruby的旧版AWS SDK](http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpRuby.html)。它需要'需要'aws-sdk''。我正在使用新的ruby AWS-SDK-CORE,它需要'需要'aws-sdk-core''。此外,较旧的SDK将对象定义为'AWS :: S3.new',而较新的sdk则将对象定义为'Aws :: S3.new'。使用'File.read'的第一个解决方案可能不适用于非文本文件。谢谢你的时间。 – slayedbylucifer
+1。嘿@Pafjo,你的回应让我的头向正确的方向旋转。我已经发布了答案。 – slayedbylucifer