Ruby on Rails CSV上传和导入 – 文件名太长
我想让管理员通过csv文件将联系人导入数据库。 因此我使用ruby csv库和以下代码片段:
if request.post? && params[:file].present? inputFile = params[:file].read CSV.foreach(inputFile) do |row| #save row here end end
但是在CSV.foreach(inputFile) do |row|
我得到一个“Errno :: ENAMETOOLONG – 文件名太长” – 错误,错误消息显示它使用整个csv文件作为文件名。
有谁知道它为什么这样做?
顺便说一句:csv文件使用’,’和’/ n’作为分隔符。
感谢其他答案的输入,我自己找到了解决方案。 问题是.read
将文件转换为包含内容的字符串,但CSV.foreach()
需要文件名或路径。 使用.path
代替解决问题:
if request.post? && params[:file].present? inputPath = params[:file].path CSV.foreach(inputPath) do |row| #save row here end end
它可能与第2行的.read调用有关。不知何故,inputFile转变为csv的内容而不是文件本身的名称。 这会让我相信你设置inputFile变量有问题。 我的猜测是.read没有像你想象的那样工作。
当你从params获得值时,尝试删除.read
。 然后变量inputFile可以将文件路径传递给CSV.foreach