2015-11-05 3 views
1

Я пытаюсь загрузить файл в свой ведро S3. Ниже я установил свой запрос с учетными данными. У меня возникают проблемы с выводом того, что должно быть в заголовках и в теле. Секретный ключ доступа находится внутри подписи. Что мне не хватает?Загрузить файл на S3 с помощью Faraday

def params 
    { 
     :key => key_prefix + file_name, 
     :aws_access_key_id => access_key_id, 
     :acl => "private", 
     :policy => encoded_policy, 
     :signature => encoded_signature 
    } 
    end 

    def headers 
    { 
     "Content-Type" => mime_type, 
     "x-amz-security-token" => session_token 
    } 
    end 

    def upload 
    connection.post do |req| 
     req.headers = headers 
     req.body = params.to_json 
    end 
    end 

    def connection 
    Faraday.new(:url => bucket_url) do |builder| 
     builder.request :multipart 
     builder.request :url_encoded 
     builder.adapter :typhoeus 
    end 
    end 

Ошибка я получаю это:

<Error><Code>PreconditionFailed</Code><Message>At least one of the pre-conditions you 
specified did not hold</Message><Condition>Bucket POST must be of the enclosure-type 
multipart/form-data</Condition> 
+0

Является ли Фарадей строгим требованием для вашего проекта? Потому что было бы намного проще использовать жемчужину AWS. –

+0

@MarcoSandrini Да, Фарадей является обязательным. Любая помощь или руководство будут оценены. – jozwright

+0

Если Faraday - единственный способ пойти, то я бы рекомендовал посмотреть спецификации для метода PUT Object (http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html), что немного проще, чем строить вручную многостраничный запрос POST. –

ответ

2

Отличный вопрос! Я столкнулся с тем же.

Жесткая часть этого файла, включая файл. Это, как представляется, работает:

def params 
    { 
     :key => key_prefix + file_name, 
     :aws_access_key_id => access_key_id, 
     :acl => "private", 
     :policy => encoded_policy, 
     :signature => encoded_signature 
     :file => Faraday::UploadIO.new(StringIO.new(<<FILECONTENTS>>), <<MIMETYPE>>) 
    } 
    end 

 Смежные вопросы

  • Нет связанных вопросов^_^