UEditor + golang 实现图片上传

来源:互联网 发布:托业网络课程 编辑:程序博客网 时间:2024/06/06 13:08

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.jsonfile, 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 stringimgfile, handler, err := r.FormFile("upfile")if err == nil {imgName,errUpload := ctr.UploadHandler(w,r,"act"+bson.NewObjectId().Hex(),imgfile,handler)imgs = imgNamelog.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 UploadimageUEue.Original = imgsue.State = "SUCCESS"ue.Title = imgsue.Url = "/weixintest/upload/"+imgsreturn &ue}

这样就能正常上传图片到编辑器了