检查上传的文件是否为csv

时间:2017-08-02 16:08:30

标签: ruby ruby-on-rails-4

我有这个名为import file的方法,我试图上传CSV。我想以csv格式检查上传的文件。我做了    <%= file_field_tag:upload_entries,接受:'。csv'%> 但这不起作用所以我试图在控制器中编写此开始和救援块 并且在上传文件的某些其他格式时无法挽救错误。我收到此错误“ SheetEntriesController中的 ArgumentError #import “当我上传.jpg或.xls文件时有人可以帮我吗?

require "csv"
  class SheetEntriesInvalid < Exception
end

class SheetEntriesController < EntryController

  unloadable

  def import
    if (params[:upload_entries]).present?
      begin
        SheetEntry.import(params[:upload_entries].path)
        redirect_to root_url, notice: "Updated Succesfully"
      rescue 
        redirect_to root_url, notice: "Invalid CSV file format."
      end
    end
  else
    redirect_to root_url, error: "No File Chosen"
  end 
  end
end

2 个答案:

答案 0 :(得分:1)

一种方法是使用Paperclip来处理文件上传。通常,使用异常来控制流量被认为是不好的做法。使用回形针,您可以在模型中预先对文件的内容类型进行验证,而不是依靠SheetEntry.import()来引发异常。

class SheetEntry < ActiveRecord::Base
  has_attached_filed :csv
  validates_attachment :csv, content_type: { content_type: ['text/csv','text/plain']} # 'csv' files may have text/plain as a content-type.
  # ...
end

答案 1 :(得分:1)

您可以查看文件我的类型

class SheetEntriesController < EntryController
  def create
    puts MIME::Types.type_for(file_path).first.content_type # "text/csv"
    if MIME::Types.type_for(file_path).first.content_type == 'text/csv'
      ...
    end
  end
end

我希望这有助于