范围下载

更新时间: 2019-03-14 10:05

如果只需要下载对象的其中一部分数据,可以使用范围下载,下载指定范围的数据。如果指定的下载范围是0~1000,则返回第0到第1000个字节的数据,包括第1000个,共1001字节的数据,即[0, 1000]。如果指定的范围无效,则返回整个对象的数据。以下代码展示了如何进行范围下载:

  1. // 引入依赖包
  2. import (
  3. "fmt"
  4. "obs"
  5. )
  6.  
  7. var ak = "*** Provide your Access Key ***"
  8. var sk = "*** Provide your Secret Key ***"
  9. var endpoint = "https://your-endpoint"
  10.  
  11. // 创建ObsClient结构体
  12. var obsClient, _ = obs.New(ak, sk, endpoint)
  13.  
  14. func main() {
  15. input := &obs.GetObjectInput{}
  16. input.Bucket = "bucketname"
  17. input.Key = "objectkey"
  18. // 指定开始和结束范围
  19. input.RangeStart = 0
  20. input.RangeEnd = 1000
  21. output, err := obsClient.GetObject(input)
  22. if err == nil {
  23. defer output.Body.Close()
  24. p := make([]byte, 1024)
  25. var readErr error
  26. var readCount int
  27. // 获取对象内容
  28. for {
  29. readCount, readErr = output.Body.Read(p)
  30. if readCount > 0 {
  31. fmt.Printf("%s", p[:readCount])
  32. }
  33. if readErr != nil {
  34. break
  35. }
  36. }
  37. } else if obsError, ok := err.(obs.ObsError); ok {
  38. fmt.Printf("Code:%s\n", obsError.Code)
  39. fmt.Printf("Message:%s\n", obsError.Message)
  40. }
  41. }

范围下载 - 图1 说明:

  • 如果指定的范围无效(比如开始位置、结束位置为负数,大于文件大小),则会返回整个对象。
  • 可以利用范围下载并发下载大对象,详细代码示例请参考concurrent_download_object_sample

父主题:下载对象