【发布时间】:2019-10-14 10:00:54
【问题描述】:
我有一个 Carrierwave 上传器 InventoryUploader,我用它来存储格式为 text/csv 或 application/vnd.ms-excel 的文件。我在处理文件时遇到了一些无效的字节序列错误,所以我想在上传之前清除它们。
我在 Carrierwave 上传器上创建了一个 process :clean_file 回调,但我正在努力寻找一种在上传之前清除任何 BOM/时髦字符的好方法。
有没有一种巧妙的方法来做到这一点?我正在尝试类似的东西:
class InventoryUploader < CarrierWave::Uploader::Base
def store_dir
"uploads/#{model.class.to_s.underscore}/#{model.id}"
end
def content_type_whitelist
%w(text/csv application/vnd.ms-excel)
end
process :clean_file
private
def clean_file
# Perhaps something like this?
# but how can I ensure it removes all weird
# character sequences?
CSV.foreach(file.path, headers: true, encoding: 'UTF-8') do |row|
row.each do |field|
field[1].gsub!("\xEF\xBB\xBF".force_encoding("UTF-8"), '')
end
end
end
end
提前致谢!
【问题讨论】:
标签: ruby-on-rails excel csv carrierwave