通过阿里云url获取图片数据信息 再上传到京东云服务器上
1. 使用阿里云的go的sdk 安装到自己系统里面
go get github.com/aliyun/aliyun-oss-go-sdk/oss
2. 声明一个文件的oss
type JdOss struct {}
3. 配置阿里云的账号权限数据
type AlBucket struct {
host string
region string
accessKeyId string
accessKeySecret string
bucket string
}
var alBucket AlBucket = AlBucket{
"your host",
"your region",
"your accesskeyId",
"your accessKeySecret",
"your bucket 地址",
}
4.写一个方法通过 通过传递阿里云的图片地址 返回阿里云获取到的数据 在阿里云存储的文件名称 错误
func (jdOss JdOss) getAlFileObj(url string) ([]byte, string, error) {
client, err := oss.New(alBucket.host, alBucket.accessKeyId, alBucket.accessKeySecret)
if err != nil {
fmt.Println("Error:", err)
return nil, "", err
}
// 获取存储空间。
bucket, err := client.Bucket(alBucket.bucket)
if err != nil {
fmt.Println("Error:", err)
return nil, "", err
}
urls := strings.Split(url, "/")
fileName := urls[len(urls)-1]
// 下载文件到流。
body, err := bucket.GetObject(fileName)
if err != nil {
fmt.Println("Error:", err)
return nil, "", err
}
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
defer body.Close()
data, err := ioutil.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
return nil, "", err
}
return data, fileName, nil
}
4. 获取阿里云数据上传到京东
func (jdOss JdOss) GetJdOssUrl(url string) (string, error) {
if url == "" {
return "", errors.New("parameters error")
}
// 获取阿里云存储的数据
responseBody, fileName, err := jdOss.getAlFileObj(url)
if err != nil {
return "get al data error", err
}
// 使用京东的sdk上传图片
// go get github.com/aws/aws-sdk-go
var timeout time.Duration
// 使用配置参数
svc := s3.New(newSession())
ctx := context.Background()
// 设置上传时间 过了时间取消上传
var cancelFn = func() {}
if timeout > 0 {
ctx, cancelFn = context.WithTimeout(ctx, timeout)
}
defer cancelFn()
_, err1 := svc.PutObjectWithContext(ctx, &s3.PutObjectInput{
Bucket: aws.String(jdBucket.bucket),
Key: aws.String(fileName),
Body: bytes.NewReader(responseBody), //os.Stdin
})
fmt.Print("successfully uploaded file", err1)
// 上传图片的地址 需要自己拼接
jdUrl := "https://jdbucker + jd_endpoint/" + fileName
return jdUrl, nil
}
func newSession() *session.Session {
creds := credentials.NewStaticCredentials(jdBucket.ak, jdBucket.sk, "")
creds.Get()
config := &aws.Config{
Region: aws.String(jdBucket.region), //Bucket所在Region
Endpoint: aws.String(jdBucket.endpoint), //Bucket所在Endpoint
DisableSSL: aws.Bool(false),
Credentials: creds,
}
return session.New(config)
}
原文:https://www.cnblogs.com/chuanzhou/p/12150207.html