2011-10-01 9 views
5

के साथ बेस 64 छवि का उपयोग करें, मैं base64 photo and paperclip -Rails से समान काम करना चाहता हूं, लेकिन कैरियरवेव के साथ। क्या कोई मुझे कैरियरवेव में बेस 64 छवियों का उपयोग करके समझा सकता है?कैरियरवेव

उत्तर

6
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 
+5

मैं कैसे नियंत्रक के माध्यम से फ़ाइल को बचाने के लिए? क्या आपके पास इसके लिए नमूना भी है? – fabian

1

स्वीकृत उत्तर मेरे लिए काम नहीं किया (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 
संबंधित मुद्दे