UEditor官方只提供了4种语言的Demo,集成golang的资料,网上还比较少,正好我们项目用到了,对前端并不熟悉的我调试了好半天才搞出来,和大家分享一下:
如何把插件跑起来很简单,在此不再赘述,谈几个容易出bug的地方。
遇到问题1.后端配置项没有正常加载,上传插件不能正常使用!
修改:ueditor.config.js 33行 , serverUrl: URL //+ "php/controller.php" 改为你要请求的路径: 如: serverUrl: URL + "oapi/forum/add"
这样加载插件的时候,应该可以正常访问你的action了,记住action一定要返回值,否则会提示
not import language file
跟踪代码,你会发现是ueditor.all.js 8093行 eval("("+r.responseText+")") 这里抛异常了, r.responseTest为空了,eval()遇空会抛此异常
所以action里面要response
func AddActivityUEditor(w http.ResponseWriter, r *http.Request) { log.Info("===ParseForm AddActivityUEditor===") r.ParseForm() op := r.Form.Get("action") log.Debug("action --->",op) switch op { case "config": //这里是conf/config.json file, err := os.Open("./ueditor_config.json") if err != nil { log.Fatal(err) os.Exit(1) } defer file.Close() fd, err := ioutil.ReadAll(file) src := string(fd) re, _ := regexp.Compile("\\/\\*[\\S\\s]+?\\*\\/") //参考php的$CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("config.json")), true); //将php中的正则移植到go中,需要将/ \/\*[\s\S]+?\*\/ /去掉前后的/,然后将\改成2个\\ //参考//去除所有尖括号内的HTML代码,并换成换行符 // re, _ = regexp.Compile("\\<[\\S\\s]+?\\>") // src = re.ReplaceAllString(src, "\n") //当把<和>换成/*和*\时,斜杠/和*之间加双斜杠\\才行。 src = re.ReplaceAllString(src, "") tt := []byte(src) var r interface{} json.Unmarshal(tt, &r) //这个byte要解码 util.Response(w, http.StatusOK, r)
遇到问题2.图片上传成功,但是没有加入到文本
这也是个坑,必须用ueditor指定的返回格式,还必须是json格式的,看代码
case "uploadimage":
//上传到图片服务器
var imgs string
imgfile, handler, err := r.FormFile("upfile")
if err == nil {
imgName,errUpload := ctr.UploadHandler(w,r,"act"+bson.NewObjectId().Hex(),imgfile,handler)
imgs = imgName
log.Debug("===imgName ===",imgName)
if errUpload != nil{
log.Error("===errUpload ===",errUpload)
return
}
}else{
log.Info("===err ===",err)
}
//将对象赋值,并转换成流文件,再转换成json,再解码
ue := getUe(imgs) //组装对象
fd,err := json.Marshal(ue) //json压缩
if err !=nil{
log.Error(err)
}
src := string(fd) //转换json流文件
tt := []byte(src)
var r interface{}
json.Unmarshal(tt, &r) //json解压
log.Debug("AddActivityUEditor response ---> ",r) //打印出json对象
util.Response(w, http.StatusOK, r)
}
}
//ueditor指定返回参数,不按这个要求图片不能写入文本框
type UploadimageUE struct {
Url string `json:"url"`
Title string `json:"title"`
Original string `json:"original"`
State string `json:"state"`
}
//组装对象
func getUe(imgs string)(result *UploadimageUE){
var ue UploadimageUE
ue.Original = imgs
ue.State = "SUCCESS"
ue.Title = imgs
ue.Url = "/weixintest/upload/"+imgs
return &ue
}
这样就能正常上传图片到编辑器了