Rails Carrierwave Base64 image upload

后端 未结 3 1757
终归单人心
终归单人心 2020-12-08 21:22

What is the best way to upload an image from a client to a Rails backend using Carrierwave. Right now our iOS developer is sending in the files as base64, so the requests co

3条回答
  •  轮回少年
    2020-12-08 22:22

    I think that one solution can be to save the decoded data to file and then assign this file to mounted uploader. And after that get rid of that file.

    The other (in-memory) solution can be this one:

    # 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
    

提交回复
热议问题