OSS附件 从阿里云到京东云 golang

通过阿里云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)
  }

posted on 2020-01-04 20:02  时光不染回忆不淡  阅读(397)  评论(0编辑  收藏  举报

导航