载波:Encoding::UndefinedConversionError(“\xFF”从 ASCII-8BIT 到 UTF-8)
Carrierwave: Encoding::UndefinedConversionError ("\xFF" from ASCII-8BIT to UTF-8)
我正在尝试使用 Carrierwave 将多个文件上传到名为 Post
的记录,并使用名为 images
的 json 属性。但是当我尝试保存记录时,我得到这个错误:
(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
gem,但此 gem 与 Rails 不兼容 5. 还建议使用 force_encoding
方法并使用"wb" 保存文件时标记,但 Carrierwave 代码没有地方实施这些建议。
这是我的代码:
形式
<%= 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
我的猜测是您需要在 ActiveRecord::Migration
中使用 :string
而不是 :json
。
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 了解更多信息。
编辑 - 添加了原因
您收到此错误的原因是 gem activesupport-json_encoder
(从 2014 年起挂在那里的那个 PR)不再维护并且与 rails 不兼容5.x.
我正在尝试使用 Carrierwave 将多个文件上传到名为 Post
的记录,并使用名为 images
的 json 属性。但是当我尝试保存记录时,我得到这个错误:
(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
gem,但此 gem 与 Rails 不兼容 5. 还建议使用 force_encoding
方法并使用"wb" 保存文件时标记,但 Carrierwave 代码没有地方实施这些建议。
这是我的代码:
形式
<%= 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
我的猜测是您需要在 ActiveRecord::Migration
中使用 :string
而不是 :json
。
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 了解更多信息。
编辑 - 添加了原因
您收到此错误的原因是 gem activesupport-json_encoder
(从 2014 年起挂在那里的那个 PR)不再维护并且与 rails 不兼容5.x.