【发布时间】:2019-03-29 15:27:41
【问题描述】:
我正在构建一个非常简单的网络工具,用户可以在其中上传 CSV 文件,然后对其进行处理并立即下载结果 CSV。
上传表单:
<%= form_tag '/upload', multipart: true do %>
<%= file_field_tag :csv %>
<%= submit_tag 'Import CSV' %>
<% end %>
上传和下载动作:
def upload
original_csv = params[:csv]
p original_csv.path # /var/folders/71/chp2vrc92_19b3jt2fcwhvp80000gn/T/RackMultipart20181025-11469-25guh5.csv
redirect_to result_path(file_path: original_csv.path)
end
def result
p params[:file_path] # /var/folders/71/chp2vrc92_19b3jt2fcwhvp80000gn/T/RackMultipart20181025-11469-25guh5.csv
output_csv = CSV.generate do |csv|
CSV.foreach(params[:file_path], headers: true) do |row|
#############################################
# "No such file or directory @ rb_sysopen" #
# exception is thrown #
#############################################
# each row data is being processed here
csv << row
end
end
# Download the file into user's computer
send_data output_csv
end
从 cmets 中可以看出,此方法不起作用,因为 result 操作中不再存在临时文件路径。我怎么能在不接触 db 的情况下解决这个问题。
【问题讨论】:
标签: ruby-on-rails ruby csv upload export-to-csv