2012-02-16 209 views
0

我想上传图片到Amazon S3这个Ruby代码:POST上传请求亚马逊失败

require 'net/http/post/multipart' 

    url = URI.parse('http://public.domain.com/') 
    File.open("/tmp/uup_1114.jpg") do |jpg| 
     req = Net::HTTP::Post::Multipart.new url.path, 
         'key' => s3_key, 
         'acl' => s3_acl, 
         'content_type' => s3_content_type, 
         'AWSAccessKeyId' => s3_AWSAccessKeyId, 
         'policy' => s3_policy, 
         'signature' => s3_signature, 
         "file" => UploadIO.new(jpg, "image/png", "image.jpg") 
     res = Net::HTTP.start(url.host, url.port) do |http| 
     http.request(req) 
     end 
    end 

而且我从亚马逊获得错误:

InvalidArgument:斗POST必须包含一个名为'key'的字段。如果指定,请检查字段的顺序。

看起来'文件'字段在查询中首先出现,并导致上述错误。我无法弄清楚如何在查询结束后发布文件字段。

回答

0

我已成功在ruby中使用AWS-SDK来创建帖子表单。但在我的情况下,我让用户从浏览器上传到AWS账户。不过,这可能帮助:

的AWS-SDK已在创建前签署后工作正常水桶叫presigned_post(选项)的调用。也 https://forums.aws.amazon.com/thread.jspa?messageID=296867&#296867

+0

谢谢!我用我在回答这个问题时描述的工具解决了我的问题。 – 2012-02-17 15:43:44

0

看到它是更好地使用AWS :: S3(​​)

S3Object

如果遇到一些问题,尝试检查,如果你的本地计算机时间有效(这真的很重要)并尝试设置

AWS::S3.const_set('DEFAULT_HOST', "s3-eu-west-1.amazonaws.com") 

如果您使用位于欧洲的存储桶。