【问题标题】:POST upload request to Amazon fails对亚马逊的 POST 上传请求失败
【发布时间】:2012-03-07 20:12:41
【问题描述】:

我正在尝试使用此 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”的字段。如果指定,请检查字段的顺序。

看起来“文件”字段在查询中排在第一位,这会导致上述错误。我不知道如何在查询结束时发布文件字段。

【问题讨论】:

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


    【解决方案1】:

    我已成功使用 ruby​​ 中的 AWS-SDK 创建帖子表单。但就我而言,我让用户从浏览器上传到 AWS 账户。不过这可能会有所帮助:

    aws-sdk 调用了一个名为 presigned_post(options) 的存储桶,该存储桶创建了一个运行良好的预签名帖子。

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

    【讨论】:

    • 谢谢!我用我在回答这个问题时描述的工具解决了我的问题。
    【解决方案2】:

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

    S3Object

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多