载波:Encoding :: UndefinedConversionError(“ \ xFF”从ASCII-8BIT转换为UTF-8)

时间:2018-07-15 06:06:41

标签: ruby-on-rails ruby encoding utf-8 carrierwave

我正尝试使用Carrierwave将多个文件上传到名为Post的json属性为images的记录。但是当我尝试保存记录时,出现此错误:

  (0.5ms)  ROLLBACK
Completed 401 Unauthorized in 15ms (ActiveRecord: 0.8ms)
Encoding::UndefinedConversionError ("\xFF" from ASCII-8BIT to UTF-8):

我以前使用过Carrierwave,但从未遇到此错误。之前,我检查了是否有人遇到过这个问题,但没有发现太多。 This question建议使用activesupport-json_encoder宝石,但该宝石与Rails 5不兼容。还建议使用force_encoding方法并在保存文件时使用“ wb”标志,但是载波代码没有实现这些建议的地方。

这是我的代码:

表格

<%= form_for @post, :html => {multipart: true}, do |f| %>
  <%= f.file_field :images, multiple: true %>
  <%= f.submit "submit" %>
<% end %>

帖子控制器

  ...
  private
    def post_params
      params.require(:post).permit({images: []})
    end
end

发布迁移

  ...
  create_table :posts do |t|
    t.json :images
    ...

帖子上传者

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :fog

  def fix_exif_rotation
    manipulate! do |img|
      img.tap(&:auto_orient)
    end
  end

  process :fix_exif_rotation
  process :resize_to_fit => [800, 56000]

  version :thumb do
    process resize_to_fit: [300, 56000]
  end
end

1 个答案:

答案 0 :(得分:2)

我的猜测是,您需要在:string中使用:json而不是ActiveRecord::Migration

class AddImagesToGallery < ActiveRecord::Migration
  def change
    add_column :galleries, :images, :string, array: true, default: [] # add images column as array
  end
end

您可以查看以下方法:Add more files and remove single file when using default multiple file uploads feature,以了解更多信息。

编辑-添加了原因

出现此错误的原因是,activesupport-json_encoder宝石(2014年就悬挂在那里)已不再维护,并且与rails 5.x不兼容。