UEditor + golang 实现图片上传

前端之家收集整理的这篇文章主要介绍了UEditor + golang 实现图片上传前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

  1. func AddActivityUEditor(w http.ResponseWriter,r *http.Request) {
  2. 	log.Info("===ParseForm AddActivityUEditor===")
  3. 	r.ParseForm()
  4. 	op := r.Form.Get("action")
  5. 	log.Debug("action --->",op)
  6. 	switch op {
  7. 	case "config": //这里是conf/config.json
  8. 		file,err := os.Open("./ueditor_config.json")
  9. 		if err != nil {
  10. 			log.Fatal(err)
  11. 			os.Exit(1)
  12. 		}
  13. 		defer file.Close()
  14. 		fd,err := IoUtil.ReadAll(file)
  15. 		src := string(fd)
  16. 		re,_ := regexp.Compile("\\/\\*[\\S\\s]+?\\*\\/") //参考PHP的$CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//","",file_get_contents("config.json")),true);
  17. 		//将PHP中的正则移植到go中,需要将/ \/\*[\s\S]+?\*\/  /去掉前后的/,然后将\改成2个\\
  18. 		//参考//去除所有尖括号内的HTML代码,并换成换行符
  19. 		// re,_ = regexp.Compile("\\<[\\S\\s]+?\\>")
  20. 		// src = re.ReplaceAllString(src,"\n")
  21. 		//当把<和>换成/*和*\时,斜杠/和*之间加双斜杠\\才行。
  22. 		src = re.ReplaceAllString(src,"")
  23. 		tt := []byte(src)
  24. 		var r interface{}
  25. 		json.Unmarshal(tt,&r) //这个byte要解码
  26. 		util.Response(w,http.StatusOK,r)

遇到问题2.图片上传成功,但是没有加入到文本

这也是个坑,必须用ueditor指定的返回格式,还必须是json格式的,看代码

  1. case "uploadimage":
  2. //上传图片服务器
  3. var imgs string
  4. imgfile,handler,err := r.FormFile("upfile")
  5. if err == nil {
  6. imgName,errUpload := ctr.UploadHandler(w,r,"act"+bson.NewObjectId().Hex(),imgfile,handler)
  7. imgs = imgName
  8. log.Debug("===imgName ===",imgName)
  9. if errUpload != nil{
  10. log.Error("===errUpload ===",errUpload)
  11. return
  12. }
  13. }else{
  14. log.Info("===err ===",err)
  15. }
  16.  
  17. //将对象赋值,并转换成流文件,再转换成json,再解码
  18. ue := getUe(imgs) //组装对象
  19. fd,err := json.Marshal(ue) //json压缩
  20. if err !=nil{
  21. log.Error(err)
  22. }
  23.  
  24. src := string(fd) //转换json流文件
  25. tt := []byte(src)
  26. var r interface{}
  27. json.Unmarshal(tt,&r) //json解压
  28. log.Debug("AddActivityUEditor response ---> ",r) //打印出json对象
  29. util.Response(w,r)
  30. }
  31. }
  32.  
  33. //ueditor指定返回参数,不按这个要求图片不能写入文本框
  34. type UploadimageUE struct {
  35. Url string `json:"url"`
  36. Title string `json:"title"`
  37. Original string `json:"original"`
  38. State string `json:"state"`
  39. }
  40.  
  41. //组装对象
  42. func getUe(imgs string)(result *UploadimageUE){
  43. var ue UploadimageUE
  44. ue.Original = imgs
  45. ue.State = "SUCCESS"
  46. ue.Title = imgs
  47. ue.Url = "/weixintest/upload/"+imgs
  48. return &ue
  49. }

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

猜你在找的Go相关文章