性能优化
一、性能优化
- 锁的频次(降低锁的频次,就比如群聊的时候使用的协程)
- json编码次数(降低JSON编码次数,能不编码尽量不编码)
- 静态资源分离(静态资源与应用资源进行分离,存储到alioss)
二、下载OSS的SDK
func UploadOss(writer http.ResponseWriter,
request * http.Request){
}
如何安装
go get github.com/aliyun/aliyun-oss-go-sdk/oss
如果报错,尝试以下解决方案:
golang.org/x/time/rate
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/time.git time
三、实现OSS上传
// 阿里云OSS相关配置信息(更换为你自己的信息)
const (
AccessKeyId = "LTAI5tNcWCJ7zUKreUsj"
AccessKeySecret = "GqEe5awgoSzBL2eXtEBRSKSmkwU"
EndPoint = "oss-cn-shanghai.aliyuncs.com"
Bucket = "golags"
)
// 权限设置为公共读状态(在阿里后台网页设置读写权限)
// 需要安装
func UploadOss(writer http.ResponseWriter, request *http.Request) {
//todo 获得上传的文件
srcfile, head, err := request.FormFile("file")
if err != nil {
util.RespFail(writer, err.Error())
return
}
//todo 获得文件后缀.png/.mp3
suffix := ".png"
//如果前端文件名称包含后缀 xx.xx.png
ofilename := head.Filename
tmp := strings.Split(ofilename, ".")
if len(tmp) > 1 {
suffix = "." + tmp[len(tmp)-1]
}
//如果前端指定filetype
//formdata.append("filetype",".png")
filetype := request.FormValue("filetype")
if len(filetype) > 0 {
suffix = filetype
}
//todo 初始化ossclient
client, err := oss.New(EndPoint, AccessKeyId, AccessKeySecret)
if err != nil {
util.RespFail(writer, err.Error())
return
}
//todo 获得bucket
bucket, err := client.Bucket(Bucket)
if err != nil {
util.RespFail(writer, err.Error())
return
}
//todo 设置文件名称
//time.Now().Unix()
//mnt 先当于我们的子目录一样
filename := fmt.Sprintf("mnt/%d%04d%s",
time.Now().Unix(), rand.Int31(),
suffix)
//todo 通过bucket上传
err = bucket.PutObject(filename, srcfile)
if err != nil {
util.RespFail(writer, err.Error())
return
}
//todo 获得url地址
url := "http://" + Bucket + "." + EndPoint + "/" + filename
//todo 响应到前端
util.RespOk(writer, url, "")
}