ruby-on-rails - Rails Carrierwave Base64 图片上传

标签 ruby-on-rails ruby carrierwave

使用 Carrierwave 将图像从客户端上传到 Rails 后端的最佳方式是什么。现在我们的 iOS 开发人员将文件作为 base64 发送,所以请求是这样的:

"image_data"=>"/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAHgAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAeAB4DAREAAhEBAxEB/8QAHwAAAQUBAQE....

所以,我的问题实际上是两个问题。我应该告诉他以不同的文件格式发送吗?如果 base64 是发送这些文件的正确方式,那么我该如何在载波中处理它们?

最佳答案

我认为一种解决方案是将解码后的数据保存到文件中,然后将此文件分配给挂载的 uploader 。然后删除该文件。

另一个(内存中)解决方案可以是这个:

# define class that extends IO with methods that are required by carrierwave
class CarrierStringIO < StringIO
  def original_filename
    # the real name does not matter
    "photo.jpeg"
  end

  def content_type
    # this should reflect real content type, but for this example it's ok
    "image/jpeg"
  end
end

# some model with carrierwave uploader
class SomeModel
  # the uploader
  mount_uploader :photo, PhotoUploader

  # this method will be called during standard assignment in your controller
  # (like `update_attributes`)
  def image_data=(data)
    # decode data and create stream on them
    io = CarrierStringIO.new(Base64.decode64(data))

    # this will do the thing (photo is mounted carrierwave uploader)
    self.photo = io
  end

end

关于ruby-on-rails - Rails Carrierwave Base64 图片上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14900038/

相关文章:

ruby-on-rails - URI::InvalidURIError(错误的URI(不是URI?):无)Active Storage service_url

ruby-on-rails - Rails 中特定页面的不同布局

ruby-on-rails - 如何在 Rails 模型的构造函数中使用参数

ruby - cassandra cql 在 where 子句中使用日期过滤数据

ruby-on-rails - Constantize 引发未初始化的常量错误

ruby-on-rails - Rails 允许用户设置默认值

ruby-on-rails - 即使在生产模式下从服务器运行,Resque 也在写入开发数据库

ruby-on-rails - Devise + omniauth +carrierwave 不保存 facebook 个人资料图片

ruby-on-rails - CarrierWave 图像 URL

ruby - 存储桶中的亚马逊 s3 和载波随机图像名称在数据库中不匹配