本文介绍如何使用流式下载。

下载文件到流

以下代码用于把指定的OSS文件下载到流:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "io/ioutil"
  6. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  7. )
  8. func main() {
  9. // 创建OSSClient实例。
  10. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  11. if err != nil {
  12. fmt.Println("Error:", err)
  13. os.Exit(-1)
  14. }
  15. // 获取存储空间。
  16. bucket, err := client.Bucket("<yourBucketName>")
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 下载文件到流。
  22. body, err := bucket.GetObject("<yourObjectName>")
  23. if err != nil {
  24. fmt.Println("Error:", err)
  25. os.Exit(-1)
  26. }
  27. // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
  28. defer body.Close()
  29. data, err := ioutil.ReadAll(body)
  30. if err != nil {
  31. fmt.Println("Error:", err)
  32. os.Exit(-1)
  33. }
  34. fmt.Println("data:", string(data))
  35. }

下载文件到缓存

以下代码用于把指定的OSS文件下载到本地缓存:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "io"
  6. "bytes"
  7. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  8. )
  9. func main() {
  10. // 创建OSSClient实例。
  11. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  12. if err != nil {
  13. fmt.Println("Error:", err)
  14. os.Exit(-1)
  15. }
  16. // 获取存储空间。
  17. bucket, err := client.Bucket("<yourBucketName>")
  18. if err != nil {
  19. fmt.Println("Error:", err)
  20. os.Exit(-1)
  21. }
  22. // 下载文件到缓存。
  23. body, err := bucket.GetObject("<yourObjectName>")
  24. if err != nil {
  25. fmt.Println("Error:", err)
  26. os.Exit(-1)
  27. }
  28. defer body.Close()
  29. buf := new(bytes.Buffer)
  30. io.Copy(buf, body)
  31. fmt.Println("buf:", buf)
  32. }

下载文件到本地文件流

以下代码用于把指定的OSS文件下载到本地文件流:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "io"
  6. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  7. )
  8. func main() {
  9. // 创建OSSClient实例。
  10. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  11. if err != nil {
  12. fmt.Println("Error:", err)
  13. os.Exit(-1)
  14. }
  15. // 获取存储空间。
  16. bucket, err := client.Bucket("<yourBucketName>")
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 下载文件到本地文件流。
  22. body, err := bucket.GetObject("<yourObjectName>")
  23. if err != nil {
  24. fmt.Println("Error:", err)
  25. os.Exit(-1)
  26. }
  27. defer body.Close()
  28. fd, err := os.OpenFile("LocalFile", os.O_WRONLY|os.O_CREATE, 0660)
  29. if err != nil {
  30. fmt.Println("Error:", err)
  31. os.Exit(-1)
  32. }
  33. defer fd.Close()
  34. io.Copy(fd, body)
  35. }