对亚马逊的POST上传请求失败

时间:2012-02-16 12:17:33

标签: ruby-on-rails http post upload amazon-s3

我正在尝试使用此Ruby代码将图像上传到Amazon S3:

    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:Bucket POST必须包含名为“key”的字段。如果已指定,请检查字段的顺序。

看起来'file'字段在查询中排在第一位,导致上面的错误。我无法弄清楚如何在查询结束时发布文件字段。

2 个答案:

答案 0 :(得分:0)

我已成功使用ruby中的AWS-SDK创建帖子表单。但就我而言,我让用户从浏览器上传到AWS账户。这仍然有用:

aws-sdk在名为presigned_post(options)的存储桶上调用了一个可以正常工作的预签名帖子。

另见 https://forums.aws.amazon.com/thread.jspa?messageID=296867&#296867

答案 1 :(得分:0)

最好使用AWS :: S3(http://amazon.rubyforge.org/

S3Object

如果您遇到一些问题,请尝试检查本地计算机时间是否有效(这非常重要)并尝试设置

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

如果您正在使用位于欧洲的水桶。