Использование Curl для публикации в приложении Restful Rails - PullRequest
1 голос
/ 19 октября 2010

Может ли кто-нибудь объяснить мне, как загружать файлы RESTful способом в приложение Rails?

Я экспериментировал с curl для имитации загрузки изображения в контроллер rails. Сначала я получил ошибки токена подлинности и отключил их, а затем попытался

curl -F "uploaded_picture=@koi.gif" http://localhost:3000/photos/create

но это не сработало, и я получаю сообщение об ошибке "Вы можете загружать только фотографии".

Я предполагаю, что это как-то связано с установкой типа содержимого загружаемого файла, но я не уверен, как это сделать.

Я использую этот код в своем контроллере (взят из книги Agile Rails)

class Photo < ActiveRecord::Base
  belongs_to :user

  validates_format_of :content_type, :with => /^image/,
     :message => "--- you can only upload pictures"

  def uploaded_picture=(picture_field)
    self.name = base_part_of(picture_field.original_filename)
    self.content_type = picture_field.content_type.chomp
    self.data = picture_field.read
  end

  def base_part_of(file_name)
    File.basename(file_name).gsub(/[^\w._-]/, '')
  end
end

Использование веб-браузера прекрасно работает, с этим кодом просмотра:

<% form_for(@photo_reflection, :html => { :multipart => true } ) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :user_id %><br />
    <%= f.text_field :user_id %>
  </p>
  <p>
    <%= f.label :data %><br />
    <%= f.file_field("uploaded_picture") %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

Было бы замечательно, если бы кто-нибудь сказал мне, как загружать файлы способом RESTful, не обходя токены аутентичности.

1 Ответ

2 голосов
/ 19 октября 2010

Для каждой страницы curl вы можете установить тип файла следующим образом:

curl -F "uploaded_picture=@koi.gif;type=image/gif" http://localhost:3000/photos/create

Для обработки токена подлинности вам придется использовать curl для получения ресурса, включая форму, а затем создать запрос POST, используя токен, предоставленный в ответ на запрос GET.

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