之前一直用nginx rewrite到fpm去实现图片上传,但是总得配置一大堆参数。
如果用Go库就方便多了。
或者有没有人愿意一起实现一个。
jimmykuu 2014-08-07 21:29
我弄过一个基于revel的,不过改成go的很容易,正有意弄一个出来,近期我会弄一个出来。
jimmykuu 2014-08-08 10:26
https://github.com/jimmykuu/Go-UEditor 先弄了一个图片上传功能了,后续功能继续完善。
kzzhr 2014-08-20 02:52
@jimmykuu 多谢站长咯。
不过貌似必须得手动建立upload文件夹我pull了一个mkdirAll过去
jimmykuu 2014-08-20 09:11
是的,后面会继续完善,包括各种配置,欢迎PR
qingo 2016-02-03 13:33
最近在站长的基础上完善了基本功能。https://github.com/3xxx/UEditor-golang满足不同页面将图片等附件上传至不同新建文件夹中。只是用的是beego框架。相比较md,ue可以批量上传,不过批量上传用的是webupload,虽然都是百度的,但webupload相对于UE而言,感觉好使用很多,包括文档以及api中的事件等。controllers中基本代码如下:——新手,不对的地方请指正。
func (c *UeditorController) ControllerUE() { op := c.Input().Get("action") // key := c.Input().Get("key") //这里进行判断各个页面,如果是addtopic,如果是addcategory switch op { case "config": //这里是conf/config.json file, err := os.Open("conf/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("//*[sS]+?*//", "", file_get_contents("config.json")), true); //将php中的正则移植到go中,需要将/ /*[sS]+?*/ /去掉前后的/,然后将改成2个\ //参考//去除所有尖括号内的HTML代码,并换成换行符 // re, _ = regexp.Compile("\<[\S\s]+?\>") // src = re.ReplaceAllString(src, " ") //当把<和>换成/*和*时,斜杠/和*之间加双斜杠\才行。 src = re.ReplaceAllString(src, "") tt := []byte(src) var r interface{} json.Unmarshal(tt, &r) //这个byte要解码 c.Data["json"] = r c.ServeJson() case "uploadimage", "uploadfile", "uploadvideo": number := c.Input().Get("number") name := c.Input().Get("name") err := os.MkdirAll(".\attachment\"+number+name, 0777) if err != nil { beego.Error(err) } //保存上传的图片 //获取上传的文件,直接可以获取表单名称对应的文件名,不用另外提取 _, h, err := c.GetFile("upfile") if err != nil { beego.Error(err) } path1 := ".\attachment\" + number + name + "\" + h.Filename err = c.SaveToFile("upfile", path1) if err != nil { beego.Error(err) } c.Data["json"] = map[string]interface{}{"state": "SUCCESS", "url": "/attachment/" + number + name + "/" + h.Filename, "title": h.Filename, "original": h.Filename} c.ServeJson() case "uploadscrawl": number := c.Input().Get("number") name := c.Input().Get("name") err := os.MkdirAll(".\attachment\"+number+name, 0777) if err != nil { beego.Error(err) } path1 := ".\attachment\" + number + name + "\" //保存上传的图片 //upfile为base64格式文件,转成图片保存 ww := c.Input().Get("upfile") ddd, _ := base64.StdEncoding.DecodeString(ww) //成图片文件并把文件写入到buffer newname := strconv.FormatInt(time.Now().Unix(), 10) // + "_" + filename err = ioutil.WriteFile(path1+newname+".jpg", ddd, 0666) //buffer输出到jpg文件中(不做处理,直接写到文件) if err != nil { beego.Error(err) } c.Data["json"] = map[string]interface{}{ "state": "SUCCESS", "url": "/attachment/" + number + name + "/" + newname + ".jpg", "title": newname + ".jpg", "original": newname + ".jpg", } c.ServeJson() case "listimage": list := []List{ {"/static/upload/1.jpg"}, {"/static/upload/2.jpg"}, } listimage := Listimage{"SUCCESS", list, 1, 21} c.Data["json"] = listimage c.ServeJson() case "catchimage": list := []ListCatch{ {"/static/upload/1.jpg", "https://pic2.zhimg.com/7c4a389acaa008a6d1fe5a0083c86975_b.png", "SUCCESS"}, {"/static/upload/2.jpg", "https://pic2.zhimg.com/7c4a389acaa008a6d1fe5a0083c86975_b.png", "SUCCESS"}, } catchimage := Catchimage{"SUCCESS", list} c.Data["json"] = catchimage c.ServeJson() file, header, err := c.GetFile("source") // r.FormFile("upfile") beego.Info(header.Filename) if err != nil { panic(err) } defer file.Close() filename := strings.Replace(uuid.NewUUID().String(), "-", "", -1) + path.Ext(header.Filename) err = os.MkdirAll(path.Join("static", "upload"), 0775) if err != nil { panic(err) } outFile, err := os.Create(path.Join("static", "upload", filename)) if err != nil { panic(err) } defer outFile.Close() io.Copy(outFile, file) // 需要支持callback参数,返回jsonp格式 // list项的state属性和最外面的state格式一致 // { // "state": "SUCCESS", // "list": [{ // "url": "upload/1.jpg", // "source": "http://b.com/2.jpg", // "state": "SUCCESS" // }, { // "url": "upload/2.jpg", // "source": "http://b.com/2.jpg", // "state": "SUCCESS" // }, ] // } } }
aspwebchh 2018-04-30 19:53
https://github.com/aspwebchh/ueditor-for-go
这里有一个, 支持图片和附件上传以及管理
共 6 个回复
jimmykuu 2014-08-07 21:29
我弄过一个基于revel的,不过改成go的很容易,正有意弄一个出来,近期我会弄一个出来。
jimmykuu 2014-08-08 10:26
https://github.com/jimmykuu/Go-UEditor 先弄了一个图片上传功能了,后续功能继续完善。
kzzhr 2014-08-20 02:52
@jimmykuu 多谢站长咯。
不过貌似必须得手动建立upload文件夹
我pull了一个mkdirAll过去
jimmykuu 2014-08-20 09:11
是的,后面会继续完善,包括各种配置,欢迎PR
qingo 2016-02-03 13:33
最近在站长的基础上完善了基本功能。https://github.com/3xxx/UEditor-golang
满足不同页面将图片等附件上传至不同新建文件夹中。
只是用的是beego框架。
相比较md,ue可以批量上传,不过批量上传用的是webupload,虽然都是百度的,但webupload相对于UE而言,感觉好使用很多,包括文档以及api中的事件等。
controllers中基本代码如下:——新手,不对的地方请指正。
func (c *UeditorController) ControllerUE() { op := c.Input().Get("action") // key := c.Input().Get("key") //这里进行判断各个页面,如果是addtopic,如果是addcategory switch op { case "config": //这里是conf/config.json file, err := os.Open("conf/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("//*[sS]+?*//", "", file_get_contents("config.json")), true); //将php中的正则移植到go中,需要将/ /*[sS]+?*/ /去掉前后的/,然后将改成2个\ //参考//去除所有尖括号内的HTML代码,并换成换行符 // re, _ = regexp.Compile("\<[\S\s]+?\>") // src = re.ReplaceAllString(src, " ") //当把<和>换成/*和*时,斜杠/和*之间加双斜杠\才行。 src = re.ReplaceAllString(src, "") tt := []byte(src) var r interface{} json.Unmarshal(tt, &r) //这个byte要解码 c.Data["json"] = r c.ServeJson() case "uploadimage", "uploadfile", "uploadvideo": number := c.Input().Get("number") name := c.Input().Get("name") err := os.MkdirAll(".\attachment\"+number+name, 0777) if err != nil { beego.Error(err) } //保存上传的图片 //获取上传的文件,直接可以获取表单名称对应的文件名,不用另外提取 _, h, err := c.GetFile("upfile") if err != nil { beego.Error(err) } path1 := ".\attachment\" + number + name + "\" + h.Filename err = c.SaveToFile("upfile", path1) if err != nil { beego.Error(err) } c.Data["json"] = map[string]interface{}{"state": "SUCCESS", "url": "/attachment/" + number + name + "/" + h.Filename, "title": h.Filename, "original": h.Filename} c.ServeJson() case "uploadscrawl": number := c.Input().Get("number") name := c.Input().Get("name") err := os.MkdirAll(".\attachment\"+number+name, 0777) if err != nil { beego.Error(err) } path1 := ".\attachment\" + number + name + "\" //保存上传的图片 //upfile为base64格式文件,转成图片保存 ww := c.Input().Get("upfile") ddd, _ := base64.StdEncoding.DecodeString(ww) //成图片文件并把文件写入到buffer newname := strconv.FormatInt(time.Now().Unix(), 10) // + "_" + filename err = ioutil.WriteFile(path1+newname+".jpg", ddd, 0666) //buffer输出到jpg文件中(不做处理,直接写到文件) if err != nil { beego.Error(err) } c.Data["json"] = map[string]interface{}{ "state": "SUCCESS", "url": "/attachment/" + number + name + "/" + newname + ".jpg", "title": newname + ".jpg", "original": newname + ".jpg", } c.ServeJson() case "listimage": list := []List{ {"/static/upload/1.jpg"}, {"/static/upload/2.jpg"}, } listimage := Listimage{"SUCCESS", list, 1, 21} c.Data["json"] = listimage c.ServeJson() case "catchimage": list := []ListCatch{ {"/static/upload/1.jpg", "https://pic2.zhimg.com/7c4a389acaa008a6d1fe5a0083c86975_b.png", "SUCCESS"}, {"/static/upload/2.jpg", "https://pic2.zhimg.com/7c4a389acaa008a6d1fe5a0083c86975_b.png", "SUCCESS"}, } catchimage := Catchimage{"SUCCESS", list} c.Data["json"] = catchimage c.ServeJson() file, header, err := c.GetFile("source") // r.FormFile("upfile") beego.Info(header.Filename) if err != nil { panic(err) } defer file.Close() filename := strings.Replace(uuid.NewUUID().String(), "-", "", -1) + path.Ext(header.Filename) err = os.MkdirAll(path.Join("static", "upload"), 0775) if err != nil { panic(err) } outFile, err := os.Create(path.Join("static", "upload", filename)) if err != nil { panic(err) } defer outFile.Close() io.Copy(outFile, file) // 需要支持callback参数,返回jsonp格式 // list项的state属性和最外面的state格式一致 // { // "state": "SUCCESS", // "list": [{ // "url": "upload/1.jpg", // "source": "http://b.com/2.jpg", // "state": "SUCCESS" // }, { // "url": "upload/2.jpg", // "source": "http://b.com/2.jpg", // "state": "SUCCESS" // }, ] // } } }
aspwebchh 2018-04-30 19:53
https://github.com/aspwebchh/ueditor-for-go
这里有一个, 支持图片和附件上传以及管理