您的位置:首页 > 编程语言 > Ruby

ueditor之ruby on rails 版

2016-05-13 14:11 375 查看
  最近公司的项目开始要使用ueditor了,但是ueditor却没有提供rails的版本,因此需要自己去定制化ueditor来满足项目的需求。不多说了,先简要说明下使用方法:

 ueditor目录下:

  注意:需要将ueditor目录放在工程/public/plugins/目录下  

  1 ueditor根目录下的ueditor.config.js

  


  和原本的ueditor一样,在红色部分处配置处理上传文件的controller和action,此处我已经做了修改,所以这里配置好之后,提交表单会直接上传到这里配置好的action

  2 ueditor根目录下的config.json

  注意,该文件和原始的ueditor config.json文件的配置方法是完全一样的,我这里展示下我的一些配置

  


  只修改了imageActionName选项,这里对应的名称将在前面所配置的action里面通过params[:ueditor_action]中取出(ueditor原本的是action,但是和rails冲突,所以我对其进行了修改)

  压缩包根目录下:

 resource_controller.rb

  该文件只用作示例,其应该根据使用者的需求对应相应的controller。

  在controller中可以需要这样进行处理:

#encoding:utf-8
require 'json'
require 'tempfile'
require 'base64'
#用于上传项目相关的资源
class ResourceController < ApplicationController
#ueditor的配置
def handle_file
#ueditor是通过在url中的传入ueditor_action(原本为action,但是由于其与rails冲突,所以我将其改为了ueditor_action)字段来区分具体的操作的
return if params[:ueditor_action].blank?
cur_action = params[:ueditor_action]

#刚进入页面时editor会进行config的访问
if (cur_action == "config")
#打开config.json文件,将其返回,注意,我这里是将config.json文件放在/public/plugins/ueditor/目录下,可以自己的需求,对这里进行相应的更改
json = File.read("#{Rails.root.to_s}/public/plugins/ueditor/config.json")
#正则替换,使其成为ueditor可以识别的格式
json = json.gsub(/\/\*[\s\S]+?\*\//, "")
result = JSON.parse(json).to_s
result = result.gsub(/=>/,":")
#返回结果
render :text => result
#图片上传
elsif (cur_action == "upload_image")
upload_image_video
#视频上传
elsif (cur_action == "upload_video")
upload_image_video
#涂鸦上传
elsif (cur_action == "upload_scrawl")
upload_scrawl
else
respond_result
end
end

private
#涂鸦文件的处理,ueditor使用base64编码,并且为png格式
def upload_scrawl
status = 'SUCCESS'
if params[:upfile].blank?
return
end
scrawl_base64 = params[:upfile]
tempfile = Tempfile.new("upload_scrawl.png")
tempfile.binmode
tempfile.write(Base64.decode64(scrawl_base64))
tempfile.close
#开始保存文件
filename = get_random_string(10) + "_" + get_random_string(10) + "_" + get_random_string(10) + ".png"

#保存文件到项目指定的路径,该方法未实现,需要自己去实现
save_file(tempfile,filename)

respond_result(filename,status)
end

#上传图片和视频的处理
def upload_image_video
status = 'SUCCESS'
#对视频文件或者图片文件进行保存,需要自己实现
respond_result(filename,status)
end

#负责向客户端返回数据
def respond_result(filename='', status='')
#该变量是根据ueditor自带的demo写的,不知道为什么,demo没有也没有传这个字段
callback = params[:callback]
response_text = ''
#构造需要返回的数据,这个是ueditor已经约定好的,不能随意对字段进行修改。也不能使用rails内置的render :json语句,因为这样最后得到的数据格式是无法被ueditor解析的。
if filename.blank?
response_text = "{\"name\":\"\"," +
"\"originalName\":\"\"," +
"\"size\":\"\",\"state\":\"#{status}\",\"type\":\"\",\"url\":\"\"}"
else
response_text = "{\"name\":\"#{filename}\"," +
"\"originalName\":\"#{filename}\"," +
"\"size\":\"#{File.size(TalentUtils.get_upload_file(filename)).to_s}\",\"state\":\"#{status}\",\"type\":\"#{File.extname(filename)}\",\"url\":\"#{filename}\"}"
end

if callback.blank?
render :text => response_text
else
render :text => "<script>"+ callback +"(" + response_text + ")</script>"
end
end

#生成随机的字符串
def get_random_string(num = 5)
#5是指生成字符串的个数,默认为5
rand(36 ** num).to_s(36)
end
end


ueditor中改变的文件为ueditor.all.js,在文件中搜索“李江涛”可以快速定位到我所更改的地方,部分地方可能未标识:

我的邮箱:seancheer@163.com

工程地址:https://github.com/seancheer/ueditor_with_rails

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: