2013-07-09 1 views
2

Я использую плагин tinymce-rails-imageupload с стрекозой.Сохранение TinyMCE Base64 изображений с dragonfly

Когда изображение загружается через отдельную форму во всплывающем окне, оно ведет себя как ожидается (сохраните изображение в хранилище данных).

Но когда пользователь перетаскивает или вставляет изображение в TinyMCE, плагин для загрузки изображения позволяет это сделать. Я попытался найти способ отключить это поведение, но, по-видимому, нет простого способа отключить разрешение загрузки изображения, в то же время запрещая поведение прошлого/перетаскивания. Поэтому я отказался от этого.

Теперь я пытаюсь сохранить изображение BASE64 в контенте TinyMCE.

В контроллере:

def store_file 
    @image = Resource.new :res_image => params[:file] 
    @image.save 
    render json: { 
    image: { 
     url: @image.res_image.remote_url 
    } 
    }, content_type: "text/html" 
end 

def create 
    @entry = Entry.new(params[:entry]) 

    # iterate through tinyMCE field params[:entry][:message] 
    # if image tag is found 
     # if value of src tag starts with "data:" 
     # then replace it with the output of 
     # Resource.create_image_from_base64(extracted_base64_value) 
     # end if 
    # end if 
    # end iteration 

    begin 
    @entry.save! 
    flash[:success] = "Entry was successfully created." 
    redirect_to entries_path 
    rescue Mongoid::Errors::Validations => e 
    render :action => "new" 
    end 
end 

В модели ресурсов, я бы что-то вроде:

image_accessor :res_image 

field :res_image_uid,  type: String 
field :res_image_name,  type: String 

def create_image_from_base64(base_64_encoded_data) 
    file = File.open('temp.png', 'wb') do|f| 
    f.write(Base64.decode64(base_64_encoded_data)) 
    end 

    resource = # create Resource with temp file 

    file.close 

    resource.res_image.remote_url 
end 

Вопросы:

  • Как создать "запись с файлом"?

  • Есть ли лучший подход для обработки вставленных/перетаскиваемых изображений base64 в TinyMCE с помощью стрекозы?

ответ