使用Paperclip上传文件,如果文件名包含中文,会导致Arel抛出一个异常:
引用
Encoding::CompatibilityError (incompatible character encodings: ASCII-8BIT and UTF-8)
这个问题在StackOverflow上也有人在问,不止是中文,其他语言也有。huacnlee在2010年就创建了这个Issue,Paperclip目前(v2.5.2)还没有修复:
https://github.com/thoughtbot/paperclip/issues/301
我尝试去搞清楚到底是哪里的问题,可惜功力不够,在Paperclip的源码里转悠半天也没找到入手的地方。时间紧迫,只能退而求其次用Monkey Patch弄了一个“可以工作”的东西。新建文件config/initializers/arel_monkey_patch.rb,内容如下:
# encoding: utf-8
# 这个Monkey Patch是为了让Paperclip能上传名字包含中文的文件,而做的临时方案
# 当下面地址所述bug被修复后,请立即更新Paperclip至新版本,并删除此文件
# https://github.com/thoughtbot/paperclip/issues/301
module Arel
module Visitors
class ToSql < Arel::Visitors::Visitor
private
def visit_Arel_Nodes_Values o
begin
"VALUES (#{o.expressions.zip(o.columns).map { |value, column|
quote(value, column && column.column)
}.join ', '})"
rescue Encoding::CompatibilityError
"VALUES (#{o.expressions.zip(o.columns).map { |value, column|
quote(value.is_a?(String) ? value.force_encoding('UTF-8') : value, column && column.column)
}.join ', '})"
end
end
end
end
end
注:我所用的Arel是v2.0.10
贴出这个给面临同样问题的同学们应应急,如果有人知道更好的解决办法,也请告诉我。
分享到:
相关推荐
NULL 博文链接:https://mylir.iteye.com/blog/800734
Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip
Paperclip - Responsive Professional Theme for Business Projects and Mobile Apps Perfect for business and personal use Built with LESS Looks great on all major browsers, tablets and phones 21 unique ...
当前,PaperclipTorrent在Paperclip上需要一个边缘版本以支持多种样式保存。 要使用,请将以下内容添加到您的Gemfile中: gem 'paperclip', github: "thoughtbot/paperclip" gem 'paperclip_torrent', github: ...
回形针上传到 S3 要求 aws-sdk 回形针 宝石安装 Gemfile gem ' aws-sdk ' gem ' paperclip ' 并运行 bundle install 创建 s3 这里 设置s3信息 从获取访问密钥和秘密密钥并将它们写好。 然后创建一个config/aws....
可以在以下位置找到Paperclip以及PaperclipOptimizer的保养好的货叉: PaperclipOptimizer是一个处理器,用于优化和缩小上传的图像。 这仅仅是围绕一个瘦包装 ,它支持许多外部优化库如 , , , , , , , , ,...
回形针 回形针旨在用作ActiveRecord的简单文件附件库。 其目的是使设置尽可能简单,并尽可能将文件与其他属性一样对待。 这意味着它们不会保存到磁盘上的... Paperclip现在需要Ruby版本> = 2.0.0和Rails版本3.2,> =
保存到云端: Curl - http://www.php.net/manual/en/book.curl.phpFileInfo - http://www.php.net/manual/en/book.fileinfo.php图像处理: ImageMagick - ... 您的文件将类似于: [global]us
paperclip-av-transcoder, 使用 ffmpeg/avconv的Paperclip 音频/视频转码器 Paperclip 转码器使用 ffmpeg/avconv的Paperclip 音频/视频转码器。这是( https://github.com/owahab/paperclip-ffmpeg )的替代品。状态
一个Laravel包添加支持Laravel IDE助手。 安装 您可以通过composer安装该软件包: composer require daniel-de-wit/laravel-ide-helper-hook-paperclip 回形针挂钩是使用加载的,如果禁用,请阅读“ 。 用法 正常...
这个 gem 使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展了 Paperclip。 安装 将此行添加到应用程序的 Gemfile 中: gem 'paperclip-storage-encrypted_filesystem', git: '...
尽管名称如此,但不应将其视为Ruby的Paperclip宝石的匹配项。 它不使用文件存储本身,而是使用Laravel的内部存储驱动程序和配置。 这在使用了 ,并且此程序包可以使用其任何(和您的自定义书面形式)变体操作。 ...
每一个当您将应用程序部署到,您正在更改RAILS_ROOT,因此您所有上传的文件都将丢失,您的存储桶将一团糟! 默认的Heroku工作路径是默认路径。 如何使用 使用以下命令将宝石添加到您的Gemfile中 gem “paperclip-...
修复 FFmpeg MP4 视频文件。 安装 将此行添加到应用程序的 Gemfile 中: gem 'paperclip-av-qtfaststart' 然后执行: $ bundle 或者自己安装: $ gem install paperclip-av-qtfaststart 用法 当 FFmpeg 生成...
设定宝石文件gem "mongoid-paperclip" 接下来,假设我们有一个用户模型,并且我们希望允许我们的用户上传头像。 Rails.root / app / models / user.rb-包含Mongoid :: Paperclip模块并调用提供的类方法class User ...
回形针水印描述这是一个简单的 Paperclip 处理器,用于在 Paperclip 的图像上应用水印。 水印将调整大小以适合基本图像。 很少有选项可用于指定位置和不透明度: watermark_distance_from_top : 以百分比指定从顶部...
大家对服务端应该都不陌生了,我就不多介绍了,主要是点击server.jre,需要用JAVA8 64位运行,然后稍等一会,会生成mod文件夹,运行配置同意elua协议就可以开服务器了
PaperClip - ActiveRecord的简单文件附件管理
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
由编写为的存储支持。 用法 使用环境变量PAPERCLIP_REDIS来定义 redis 服务器的位置 PAPERCLIP_REDIS=http://remotehost:6379/ 特约paperclip_redis 查看最新的 master 以确保该功能尚未实现或 bug 尚未修复。 ...