我有这个名为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
答案 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
我希望这有助于