使用Curl发布到Restful Rails应用程序

时间:2010-10-19 03:33:53

标签: ruby-on-rails rest curl

有人可以告诉我如何将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 个答案:

答案 0 :(得分:2)

Per curl的联机帮助页,您可以设置文件类型,如下所示:

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

为了处理真实性令牌,您必须使用curl来获取包括表单在内的资源,然后使用响应GET请求时提供的令牌构造POST请求。