在 Rails 中将 Carrierwave 附件编码为 base64

Encode Carrierwave attachment to base64 in Rails

我正在使用 Carrierwave gem 将附件上传到我的模型。我添加了带有映射器附件插件的 elasticsearch 以允许对附件进行全文搜索。

Carrierwave 和 elasticsearch 工作正常,但为了使全文搜索正常工作,我需要将附件编码为 base64。

我已按照本教程 (http://rny.io/rails/elasticsearch/2013/08/05/full-text-search-for-attachments-with-rails-and-elasticsearch.html) 进行操作,但我认为 Rails 或 Carrierwave 已进行了一些更改,因为我无法使其正常工作。具体来说,当我尝试将附件编码为 base64 时,出现以下类型错误:

no implicit conversion of CarrierWave::SanitizedFile into String

错误在模型的以下行中:

File.open(Base64.encode64(File.read(document.file)))

如果我用 url 替换实际文件的路径,它工作正常。

我已经搜索过了,我能找到的唯一相关答案给了我同样的错误:Carrierwave encode file to base64 as process

我是一个完整的 rails 新手,希望这对除我之外的每个人来说都是显而易见的,但我们一开始都是初学者,对吧?

谢谢!

CarrierWave 的read 方法returns 文件的内容。所以假设 Document 是你的模型并且 file 是你的上传者属性,这应该有效:

Base64.encode64(document.file.read)