将 Base64 图像与 Carrierwave 结合使用

发布于 2024-12-07 20:46:41 字数 188 浏览 7 评论 0原文

我想执行与 base64 photo and paperclip -Rails 类似的操作,但是使用载波。 有人可以解释我在 Carrierwave 中使用 Base64 图像吗?

I want to perform the similar thing as from base64 photo and paperclip -Rails, but with Carrierwave.
Could anybody explain me using of base64 images in Carrierwave?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ま柒月 2024-12-14 20:46:41
class ImageUploader < CarrierWave::Uploader::Base

  class FilelessIO < StringIO
    attr_accessor :original_filename
    attr_accessor :content_type
  end

  before :cache, :convert_base64

  def convert_base64(file)
    if file.respond_to?(:original_filename) &&
        file.original_filename.match(/^base64:/)
      fname = file.original_filename.gsub(/^base64:/, '')
      ctype = file.content_type
      decoded = Base64.decode64(file.read)
      file.file.tempfile.close!
      decoded = FilelessIO.new(decoded)
      decoded.original_filename = fname
      decoded.content_type = ctype
      file.__send__ :file=, decoded
    end
    file
  end
class ImageUploader < CarrierWave::Uploader::Base

  class FilelessIO < StringIO
    attr_accessor :original_filename
    attr_accessor :content_type
  end

  before :cache, :convert_base64

  def convert_base64(file)
    if file.respond_to?(:original_filename) &&
        file.original_filename.match(/^base64:/)
      fname = file.original_filename.gsub(/^base64:/, '')
      ctype = file.content_type
      decoded = Base64.decode64(file.read)
      file.file.tempfile.close!
      decoded = FilelessIO.new(decoded)
      decoded.original_filename = fname
      decoded.content_type = ctype
      file.__send__ :file=, decoded
    end
    file
  end
静赏你的温柔 2024-12-14 20:46:41

接受的答案对我不起作用(v0.9)。
这似乎是在缓存回调之前失败的检查。

此实现有效:

class ImageUploader < CarrierWave::Uploader::Base

  # Mimick an UploadedFile.
  class FilelessIO < StringIO
    attr_accessor :original_filename
    attr_accessor :content_type
  end

  # Param must be a hash with to 'base64_contents' and 'filename'.
  def cache!(file)
    if file.respond_to?(:has_key?) && file.has_key?(:base64_contents) && file.has_key?(:filename)
      local_file = FilelessIO.new(Base64.decode64(file[:base64_contents]))
      local_file.original_filename = file[:filename]
      extension = File.extname(file[:filename])[1..-1]
      local_file.content_type = Mime::Type.lookup_by_extension(extension).to_s
      super(local_file)
    else
      super(file)
    end
  end

end

The accepted answer did not worked for me (v0.9).
It seems to be a check that fails before the cache callback.

This implementation works:

class ImageUploader < CarrierWave::Uploader::Base

  # Mimick an UploadedFile.
  class FilelessIO < StringIO
    attr_accessor :original_filename
    attr_accessor :content_type
  end

  # Param must be a hash with to 'base64_contents' and 'filename'.
  def cache!(file)
    if file.respond_to?(:has_key?) && file.has_key?(:base64_contents) && file.has_key?(:filename)
      local_file = FilelessIO.new(Base64.decode64(file[:base64_contents]))
      local_file.original_filename = file[:filename]
      extension = File.extname(file[:filename])[1..-1]
      local_file.content_type = Mime::Type.lookup_by_extension(extension).to_s
      super(local_file)
    else
      super(file)
    end
  end

end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文