2

我想让管理员通过 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' 作为分隔符。

4

3 回答 3

11

感谢其他答案的输入,我自己找到了解决方案。问题是.read将文件转换为包含内容的字符串,但CSV.foreach()需要一个 filename 或 path 。使用.path代替解决了这个问题:

 if request.post? && params[:file].present?
     inputPath = params[:file].path
     CSV.foreach(inputPath) do |row|
         #save row here
     end
 end
于 2013-09-05T08:35:20.930 回答
1

它可能与第 2 行的 .read 调用有关。不知何故 inputFile 变成了 csv 的内容,而不是文件本身的名称。这会让我相信你设置 inputFile 变量有问题。我的猜测是 .read 没有按照您的预期工作。

于 2013-09-04T17:56:26.517 回答
0

尝试.read从参数中获取值时删除。然后变量 inputFile 可能具有要传递给 CSV.foreach 的文件路径

于 2013-09-04T18:02:25.860 回答