gpt4 book ai didi

ruby-on-rails - 如何读取上传的文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:56 24 4
gpt4 key购买 nike

我给用户机会上传他们的文件。但是,应用程序不会将这些文件保存到数据库中,它只需要从中获取信息。

所以从一个看起来像这样的表单:

= simple_form_for @channel, method: :post do |f|
= f.input :name
= f.input :configuration_file, as: :file
= f.submit

params[:channel][:configuration_file]

#<ActionDispatch::Http::UploadedFile:0xc2af27c @original_filename="485.csv", @content_type="text/csv", @headers="Content-Disposition: form-data; name=\"channel[configuration_file]\"; filename=\"485.csv\"\r\nContent-Type: text/csv\r\n", @tempfile=#<File:/tmp/RackMultipart20140822-6972-19sqxq2>>

我究竟如何从这个东西中读取信息?我简单地试了一下

File.open(params[:channel][:configuration_file])

但它返回错误

!! #<TypeError: can't convert ActionDispatch::Http::UploadedFile into String>

附言非常感谢 xml 和 csv 的其他解决方案!

最佳答案

根据 Rails 文档:

http://api.rubyonrails.org/classes/ActionDispatch/Http/UploadedFile.html

上传的文件支持以下实例方法,其中包括:

open() 

path()

read(length=nil, buffer=nil)

你可以试试:

my_data = params[:channel][:configuration_file].read

获取文件内容的字符串?

甚至:

my_data = File.read params[:channel][:configuration_file].path

此外,如果文件很长,您可能希望打开文件并逐行阅读。这里有一些解决方案:

How to read lines of a file in Ruby

如果你想读取 CSV 文件,你可以尝试:

require 'csv'    

CSV.foreach(params[:channel][:configuration_file].path, :headers => true) do |row|
row_hash = row.to_hash
# Do something with the CSV data
end

当然假设您的 CSV 文件中有标题。

对于 XML,我推荐优秀的 Nokogiri gem:

http://nokogiri.org/

至少部分是因为它使用高效的 C 库来导航 XML。 (如果您使用的是 JRuby,这可能是个问题)。它的使用可能超出了这个答案的范围,并且在 Nokogiri 文档中有充分的解释。

关于ruby-on-rails - 如何读取上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com