【问题标题】:Ruby on Rails CSV upload&import - File name too longRuby on Rails CSV 上传和导入 - 文件名太长
【发布时间】:2013-09-04 17:45:19
【问题描述】:

我想让管理员通过 csv 文件将联系人导入数据库。因此,我使用的是 ruby​​ csv 库和以下代码 sn-p:

 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' 作为分隔符。

【问题讨论】:

    标签: ruby-on-rails ruby csv


    【解决方案1】:

    感谢其他答案的输入,我自己找到了解决方案。问题是 .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】:

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

      【讨论】:

        【解决方案3】:

        当您从参数中获取值时,尝试仅删除 .read。那么变量 inputFile 可能有要传递给 CSV.foreach 的文件路径

        【讨论】:

        • 仅删除 .read 会导致此错误:“没有将 ActionDispatch::Http::UploadedFile 隐式转换为字符串”。但是,如果我添加 .path 一切最终都会正常工作:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        • 2012-02-14
        • 2016-03-24
        • 1970-01-01
        • 2011-11-29
        • 1970-01-01
        • 2021-12-24
        相关资源
        最近更新 更多