有人可以告诉我如何将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方式上传文件而不绕过真实性令牌,那就太棒了。
答案 0 :(得分:2)
Per curl的联机帮助页,您可以设置文件类型,如下所示:
curl -F "uploaded_picture=@koi.gif;type=image/gif" http://localhost:3000/photos/create
为了处理真实性令牌,您必须使用curl来获取包括表单在内的资源,然后使用响应GET请求时提供的令牌构造POST请求。