Go iris 上传文件 + CKEditor 图片上传实践
最近将网站的富文本编辑器从 Vue-html5-editor 切换到 CKEditor,于是图片上传接口也跟着修改,本着一不做二不休的原则,那就索性把上传接口也一并优化,一个网站最好仅仅提供一个上传的接口。本网站基于 go iris 框架开发,所以上传接口也是基于 go iris 框架。结合富文本编辑器 CKEditor,以及其他上传场景,统一使用一个上传接口。
上传表单
file, info, err := ctx.FormFile("upload") // go iris 框架对文件上传已经做了很好的封装 // CKEditor,上传表单用的 name="upload" // 于是将网站文章小图片上传的表单也做相应修改,这样就可以共用一个上传接口
文件命名
go get github.com/google/uuid
// 这个包即插即用,没有任何初始化
// 这里导入 google 的官方的 uuid 包,使用全局唯一的 uuid,生成文件名:89073e52-6494-4d2a-9b66-c12e187f124c.jpg
// 这个包即插即用,没有任何初始化
// 这里导入 google 的官方的 uuid 包,使用全局唯一的 uuid,生成文件名:89073e52-6494-4d2a-9b66-c12e187f124c.jpg
日志记录
go get github.com/kataras/golog
// 这个包简单易用,我有一篇文章专门介绍过,即插即用,https://www.hrefs.cn/article/golog-and-juju-errors-quickstart
// 这个包简单易用,我有一篇文章专门介绍过,即插即用,https://www.hrefs.cn/article/golog-and-juju-errors-quickstart
支持CKEditor图片上传
result := struct { Message string `json:"msg"` Uploaded int `json:"uploaded"` Url string `json:"url"` }{"", 0, ""} // CKEditor图片上传组件接收一个json,必须包含两个字段,uploaded=1 表示上传成功,url 表示上传成功后的返回的地址 // {uploaded: 1, url: "/upload/20200221/89073e52-6494-4d2a-9b66-c12e187f124c.jpg"}
go iris 上传源码
package controller import ( "github.com/google/uuid" "github.com/kataras/golog" "github.com/kataras/iris" "io" "os" "path" "strings" "time" ) func Upload(ctx iris.Context) { result := struct { Message string `json:"msg"` Uploaded int `json:"uploaded"` Url string `json:"url"` }{"", 0, ""} file, info, err := ctx.FormFile("upload") if err != nil { golog.Error(err) ctx.JSON(result) } dir := "/upload/" + time.Now().Format("20060102") + "/" err = os.MkdirAll("./public"+dir, os.ModePerm) if err != nil { golog.Error(err) ctx.JSON(result) } url := dir + uuid.New().String() + strings.ToLower(path.Ext(info.Filename)) out, err := os.OpenFile("./public/"+url, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { golog.Error(err) ctx.JSON(result) } defer file.Close() defer out.Close() io.Copy(out, file) result.Uploaded = 1 result.Url = url ctx.JSON(result) }
// 上传接口的 response
{
"msg":"",
"uploaded":1,
"url":"/upload/20200221/8617b336-6128-4fef-920e-f29ef8c49bc7.jpg"
}
{
"msg":"",
"uploaded":1,
"url":"/upload/20200221/8617b336-6128-4fef-920e-f29ef8c49bc7.jpg"
}
Posted by 何敏 on 2020/2/21 09:12:06