最近一直在用Leanote来做自己的笔记整理,在使用的过程中发现图片的尺寸有点大,尤其是很多时候为了方便,我是直接截屏来粘贴上传的,这样造成的就是有些图片就比较大(可能是hiDpi的原因,图片尺寸较大),本来想研究一下Go里怎么做图片的优化的,后来一想,七牛在这方面处理的很好,而且,它还提供10个G的免费空间,索性,直接研究Go下的七牛API会更直接一些。 这里就不写怎么申请七牛空间。有需要的可以直接百度。 ![](/api/file/getImage?fileId=5e04eeb2e8ede61732000007) ## 自定义镜像域名 因为已经有很多图片了,所以,这里需要做一个镜像配置,而且,这样的话,目前还不用去开发七牛的上传功能。 为了安全,这个域名绑定在自身服务器的当前用户目录里,比如: ``` LEANOTE_ROOT/files/517/USER_ID/ ``` 对Leanote的代码也没有做太大的改变,就改了ApiFileController.go里的getImage里直接302跳转到七牛上绑定的域名,这个对客户端不是很友好,所以,又判断了一下UserAgent,如果是客户端的话,就还使用原来的方法从服务器上加载文件内容并输出,相应的代码段如下: ```go func (c ApiFile) GetImage(fileId string) revel.Result { path := fileService.GetFile(c.getUserId(), fileId) // 得到路径 if path == "" { return c.RenderText("") } fn := strings.TrimLeft(path, "/") //files/427/540817e099c37b583c000001/ ua := c.Request.GetHttpHeader("User-Agent") if strings.Index(ua, "Needle") != -1 { // 实际上,应该返回的是完事的URL路径,目前懒得写完整的代码了,先这样偷懒一下 fn = revel.BasePath + "/" + strings.TrimLeft(path, "/") file, _ := os.Open(fn) return c.RenderFile(file, revel.Inline) // revel.Attachment } else { return c.Redirect("http://img.imzhp.com/" + fn[35:] + "-web") } } ``` 后面等有空了,做一个完整的处理。 ## 下载七牛API ``` go get github.com/qiniu/api.v7 ``` 下载的时候发现,最近,下载速度是巨慢,goproxy用过,终端直接蕃蔷也试过,都不理想,索性,使用下载工具直接从github上下载压缩包放到go的src里。 ## 配置文件 我做的这些修改,只是单人使用的,所以直接就使用配置文件来处理了,如果需要面向注册用户使用的话,需要在用户设置里去处理。 在app.conf中添加如下信息 ``` # qiniu config qiniu.enabled=false # 是否开启七牛存储 qiniu.use_https=false # 是否使用https qiniu.bucket= # 七牛存储空间的名称 qiniu.access_key= # 七牛个人中心申请到的ak qiniu.secret_key= # 七牛个人中心申请到的ak对应的sk ``` ## 修改Leanote代码 这里目前考虑了一下,需要处理几个部分: 1. 上传部分的代码,需要同步上传到七牛云 2. 上传完成后,需要直接返回七牛云的外链URL 最后修改:5年前 © 著作权归作者所有