Ruby: Как опубликовать файл через HTTP как multipart / form-data? - PullRequest
101 голосов
/ 08 октября 2008

Я хочу сделать HTTP POST, который выглядит как форма HMTL, отправленная из браузера. В частности, опубликовать некоторые текстовые поля и поле файла.

Публикация текстовых полей не вызывает затруднений, здесь есть пример в rdocs net / http, но я не могу понять, как разместить файл вместе с ним.

Net :: HTTP не выглядит лучшей идеей. бордюр выглядит хорошо.

Ответы [ 12 ]

0 голосов
/ 16 декабря 2016

гем из нескольких частей прекрасно работает с Rails 4 Net :: HTTP, никаких других специальных гемов

def model_params
  require_params = params.require(:model).permit(:param_one, :param_two, :param_three, :avatar)
  require_params[:avatar] = model_params[:avatar].present? ? UploadIO.new(model_params[:avatar].tempfile, model_params[:avatar].content_type, model_params[:avatar].original_filename) : nil
  require_params
end

require 'net/http/post/multipart'

url = URI.parse('http://www.example.com/upload')
Net::HTTP.start(url.host, url.port) do |http|
  req = Net::HTTP::Post::Multipart.new(url, model_params)
  key = "authorization_key"
  req.add_field("Authorization", key) #add to Headers
  http.use_ssl = (url.scheme == "https")
  http.request(req)
end

https://github.com/Feuda/multipart-post/tree/patch-1

0 голосов
/ 05 февраля 2009

У меня была такая же проблема (нужно публиковать на веб-сервере jboss). У меня отлично работает curb, за исключением того, что он вызывает сбой ruby ​​(ruby 1.8.7 в ubuntu 8.10), когда я использую переменные сеанса в коде.

Я копаюсь в документации по остальным клиентам, не могу найти индикацию поддержки нескольких частей. Я попробовал приведенные выше примеры rest-client, но jboss сказал, что сообщение http не является составным.

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