如何临时保存rails3中的公用文件夹中的文件

时间:2013-09-21 15:46:17

标签: ruby-on-rails ruby-on-rails-3

我想在浏览文件时将文件临时保存在公用文件夹中。

那是当浏览文件时首先保存在公共文件夹中然后我将使用roo gem读取此文件,所以请帮助我如何继续。

1 个答案:

答案 0 :(得分:2)

例如像这样

表格上传文件:

<%= form_tag some_path, :multipart => true do %>
  <%= file_field_tag :my_file %>
  <%= submit_tag 'Upload' %>
<% end %>

在某处控制器商店上传文件:

file = params[:my_file].read
filename = params[:my_file].original_filename
File.open(File.join(Rails.root, 'path', 'to', 'dir', filename), 'wb') { |f| f.write file }

然后在必要时使用Roo处理文件并在之后删除:

path = File.join Rails.root, 'path', 'to', 'dir', filename
rows = Roo::Spreadsheet.open path
for i in 0..rows.last_row do
   ...
end
File.delete path

你必须在某处存储文件名。或者处理此目录中的所有文件。例如所有xlsx文件:

Dir.glob(File.join Rails.root, 'path', 'to', 'dir', '*.xlsx').each do |path|
  rows = Roo::Spreadsheet.open path
  ...
end

实际上你必须在尝试存储之前检查文件是否上传,如果你正在处理文件,请检查文件是否存在,就像在第一个例子中一样。但是为了简单起见,我们跳过了它。