【Go实战 | 电商平台】(7) 图片上传到七牛云

本文涉及的产品
.cn 域名,1个 12个月
简介: 文章目录1. 获取配置信息2. config3. upload完整代码

文章目录

1. 获取配置信息

2. config

3. upload

完整代码

这一章节中我们介绍如何把图片上传到七牛云,并且返回对应图片的 url 。因为后续我们的创建的商品,更换头像等等都是把我们的图片上传七牛云存储,再返回对应的url的。


1. 获取配置信息

打开七牛云官网,并进入控制台。

image.png

找到资源管理的存储空间

image.png


创建空间

image.png


新建存储空间

image.png


然后我们进入到这个页面,你可以选择绑定域名,也可以选择不绑定。如果不绑定七牛会送你一个体验的域名,好像是7天时效。

image.png


绑定域名就可以了

image.png


将你的域名绑定上就可以了。

image.png

如果没有域名的话,这里就有一个七牛送的域名


image.png


获取密钥

image.png

这两个都要

image.png

这样就行了


2. config

config.ini 文件
AccessKey=是上面AK
SercetKey=是上面的SK
Bucket=是刚刚新创的名称!
QiniuServer=是绑定的域名

image.png


conf.go 文件

加载配置

func LoadQiniu(file *ini.File) {
  AccessKey = file.Section("qiniu").Key("AccessKey").String()
  SerectKey = file.Section("qiniu").Key("SerectKey").String()
  Bucket = file.Section("qiniu").Key("Bucket").String()
  QiniuServer = file.Section("qiniu").Key("QiniuServer").String()
}

3. upload

在pkg包下的utils下创建upload.go文件


image.png


读取配置文件

var AccessKey = conf.AccessKey
  var SerectKey = conf.SerectKey
  var Bucket = conf.Bucket
  var ImgUrl = conf.QiniuServer
  putPlicy := storage.PutPolicy{
  Scope:Bucket,
  }


上传七牛云并返回url和状态

mac := qbox.NewMac(AccessKey,SerectKey)
  upToken := putPlicy.UploadToken(mac)
  cfg := storage.Config{
  Zone : &storage.ZoneHuanan,
  UseCdnDomains : false,
  UseHTTPS : false,
  }
  putExtra := storage.PutExtra{}
  formUploader := storage.NewFormUploader(&cfg)
  ret := storage.PutRet{}
  err := formUploader.PutWithoutKey(context.Background(),&ret,upToken,file,fileSize,&putExtra)
  if err != nil {
  code := e.ErrorUploadFile
  return code , err.Error()
  }
  url := ImgUrl + ret.Key
  return 200,url


完整代码

传入文件,以及文件大小,返回的是url和状态

package util
import (
  "context"
  "github.com/qiniu/go-sdk/v7/auth/qbox"
  "github.com/qiniu/go-sdk/v7/storage"
  "mall/conf"
  "mall/pkg/e"
  "mime/multipart"
)
// 封装上传图片到七牛云然后返回状态和图片的url
func UploadToQiNiu(file multipart.File ,fileSize int64) (int,string) {
  var AccessKey = conf.AccessKey
  var SerectKey = conf.SerectKey
  var Bucket = conf.Bucket
  var ImgUrl = conf.QiniuServer
  putPlicy := storage.PutPolicy{
  Scope:Bucket,
  }
  mac := qbox.NewMac(AccessKey,SerectKey)
  upToken := putPlicy.UploadToken(mac)
  cfg := storage.Config{
  Zone : &storage.ZoneHuanan,
  UseCdnDomains : false,
  UseHTTPS : false,
  }
  putExtra := storage.PutExtra{}
  formUploader := storage.NewFormUploader(&cfg)
  ret := storage.PutRet{}
  err := formUploader.PutWithoutKey(context.Background(),&ret,upToken,file,fileSize,&putExtra)
  if err != nil {
  code := e.ErrorUploadFile
  return code , err.Error()
  }
  url := ImgUrl + ret.Key
  return 200,url
}


相关文章
|
2月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
2月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
3月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
3月前
|
缓存 NoSQL Redis
go-zero微服务实战系列(七、请求量这么高该如何优化)
go-zero微服务实战系列(七、请求量这么高该如何优化)
|
3月前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
3月前
|
消息中间件 NoSQL Kafka
go-zero微服务实战系列(九、极致优化秒杀性能)
go-zero微服务实战系列(九、极致优化秒杀性能)
|
3月前
|
消息中间件 缓存 监控
go-zero微服务实战系列(六、缓存一致性保证)
go-zero微服务实战系列(六、缓存一致性保证)
|
3天前
|
安全 网络协议 Go
Go语言网络编程
【10月更文挑战第28天】Go语言网络编程
89 65
|
3天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
24 13
|
3天前
|
网络协议 安全 Go
Go语言的网络编程基础
【10月更文挑战第28天】Go语言的网络编程基础
19 8