Не удалось отправить запрос POST в Amazon - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь загрузить изображение в Amazon S3 с этим кодом Ruby:

    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

И я получаю сообщение об ошибке от Amazon:

InvalidArgument: Bucket POST должен содержать поле с именем 'key'. Если он указан, проверьте порядок полей.

Похоже, поле 'file' идет первым в запросе, и это вызывает ошибку выше. Я не могу понять, как разместить поле файла в конце запроса.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Лучше использовать AWS :: S3 (http://amazon.rubyforge.org/)

и S3Object

Если у вас возникли некоторые проблемы, попробуйте проверить, есть ли у вас локальное компьютерное время действительно (это действительно важно) и попробуйте установить

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

, если вы работаете с ведром (ями), расположенными в Европе.

0 голосов
/ 16 февраля 2012

Я успешно использовал AWS-SDK в ruby ​​для создания почтовых форм. Но в моем случае я заставлял пользователей загружать из браузера в учетную запись AWS. Тем не менее это может помочь:

у aws-sdk есть вызов в корзину с именем presigned_post (опции), которая создает предварительно подписанную запись, которая прекрасно работает.

Смотрите также https://forums.aws.amazon.com/thread.jspa?messageID=296867&#296867

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...