4

我试图在 Rails 中找到文档文件处理,但没有成功。这是 File 类的链接(由 file_filed_tag 的文档指定): http ://api.rubyonrails.org/classes/File.html

我认为必须有一套更好的源文档。我的主要问题是我可以在哪里保存不可公开访问的文件。我有兴趣将文件上传的文件临时用于用户的“向导”之类的目的。

4

2 回答 2

4

Rails 文档只是顺便提到了这 一点处理上传的源是https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/upload.rb

您可以使用 gem "paperclip" 为您处理文件上传:

https://github.com/thoughtbot/paperclip

上传的文件通常存储在 public/system 中,回形针中的默认配置是:

:rails_root/public/system/:class/:attachment/:id_partition/:style/:filename

但如果你想保持它不公开,你可以将它更改为另一个主文件夹:

:rails_root/private/:class/:attachment/:id_partition/:style/:filename
于 2013-05-05T08:03:29.707 回答
4

Rails 处理文件上传很像任何 Web 框架:它将文件上传的处理留给您正在使用的 Web 服务器(Apache、Nginx 等)。然后,当文件上传完成时,它会为您的框架提供上传文件的位置(通常是临时文件)(以及诸如 MIME 类型之类的东西)。由您决定如何处理该文件。Rails 通过在控制器中为您提供一个 Ruby File 对象来做到这一点。

如果您使用“回形针”之类的 gem,它可以让您对文件进行更多的控制,而不是仅仅自己处理它,您可以自动调整图像大小或其他上传后挂钩,真的值得一看进入。

如果您选择自己做,您需要控制器代码来获取 File 对象(临时文件)并将其写入不同的位置。因此,如果您有一个包含文件的多部分 Web 表单:

<%= form_tag({:action => :upload}, :multipart => true) do %>
  <%= file_field_tag 'picture' %>
<% end %>

你最终会picture在你的参数哈希中得到一个对象:

params[:picture]

那是临时文件。Rails 提供了两种额外的方法来确定原始文件名和 MIME 类型:

params[:picture].original_filename
params[:picture].content_type
于 2013-05-05T12:18:34.643 回答