UEditor的Go图片后端

之前一直用nginx rewrite到fpm去实现图片上传,但是总得配置一大堆参数。

如果用Go库就方便多了。

或者有没有人愿意一起实现一个。

共 6 个回复


jimmykuu 2014-08-07 21:29

我弄过一个基于revel的,不过改成go的很容易,正有意弄一个出来,近期我会弄一个出来。

# 0

jimmykuu 2014-08-08 10:26

https://github.com/jimmykuu/Go-UEditor 先弄了一个图片上传功能了,后续功能继续完善。

# 1

kzzhr 2014-08-20 02:52

@jimmykuu 多谢站长咯。

不过貌似必须得手动建立upload文件夹
我pull了一个mkdirAll过去

# 2

jimmykuu 2014-08-20 09:11

是的,后面会继续完善,包括各种配置,欢迎PR

# 3

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("/\/\*[\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要解码
        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"
        //     }, ]
        // }
    }
}
# 4

aspwebchh 2018-04-30 19:53

https://github.com/aspwebchh/ueditor-for-go

这里有一个, 支持图片和附件上传以及管理

posted on 2020-06-18 17:11  ExplorerMan  阅读(402)  评论(0编辑  收藏  举报

导航