我试图在Rails中找到文档文件处理,但没有成功。这是File类的链接(由file_filed_tag的文档指定): http://api.rubyonrails.org/classes/File.html
我认为必须有更好的源文档集。我的主要问题是我在哪里可以保存不可公开访问的文件。我有兴趣暂时将文件上传文件用于“向导”,就像用户一样。
答案 0 :(得分:4)
仅限Rails文档mentions this in passing 处理上传的来源是https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/upload.rb
您可以使用gem“paperclip”为您处理文件上传:
https://github.com/thoughtbot/paperclip
通常将上传的文件存储在公共/系统中,默认情况下 回形针中的配置是:
:rails_root/public/system/:class/:attachment/:id_partition/:style/:filename
但是如果你想让它不公开,你可以把它改成另一个主文件夹:
:rails_root/private/:class/:attachment/:id_partition/:style/:filename
答案 1 :(得分:3)
Rails处理文件上传的方式与任何Web框架非常相似:它将文件上传的处理留给您正在使用的Web服务器(Apache,Nginx等)。然后,当文件上传完成时,它会为您的框架提供上传文件的位置(通常是临时文件)(以及MIME类型的内容)。由您决定如何处理该文件。 Rails通过在控制器中为您提供Ruby File对象来实现此目的。
如果您使用像“回形针”这样的宝石,它可以让您对开箱即用的文件进行更多控制,而不仅仅是自己处理它,您可以自动调整图像大小或其他上传后挂钩,真的值得研究。
如果您选择自己动手,则需要采用File对象(临时文件)的控制器代码并将其写入其他位置。因此,如果您有一个包含文件的多部分Web表单:
<%= form_tag({:action => :upload}, :multipart => true) do %>
<%= file_field_tag 'picture' %>
<% end %>
你的params散列中最终会得到一个picture
对象:
params[:picture]
这是临时文件。 Rails提供了两种额外的方法来确定原始文件名和MIME类型:
params[:picture].original_filename
params[:picture].content_type