范围下载
更新时间: 2019-03-14 10:05
如果只需要下载对象的其中一部分数据,可以使用范围下载,下载指定范围的数据。如果指定的下载范围是0~1000,则返回第0到第1000个字节的数据,包括第1000个,共1001字节的数据,即[0, 1000]。如果指定的范围无效,则返回整个对象的数据。以下代码展示了如何进行范围下载:
- // 引入依赖包
- import (
- "fmt"
- "obs"
- )
- var ak = "*** Provide your Access Key ***"
- var sk = "*** Provide your Secret Key ***"
- var endpoint = "https://your-endpoint"
- // 创建ObsClient结构体
- var obsClient, _ = obs.New(ak, sk, endpoint)
- func main() {
- input := &obs.GetObjectInput{}
- input.Bucket = "bucketname"
- input.Key = "objectkey"
- // 指定开始和结束范围
- input.RangeStart = 0
- input.RangeEnd = 1000
- output, err := obsClient.GetObject(input)
- if err == nil {
- defer output.Body.Close()
- p := make([]byte, 1024)
- var readErr error
- var readCount int
- // 获取对象内容
- for {
- readCount, readErr = output.Body.Read(p)
- if readCount > 0 {
- fmt.Printf("%s", p[:readCount])
- }
- if readErr != nil {
- break
- }
- }
- } else if obsError, ok := err.(obs.ObsError); ok {
- fmt.Printf("Code:%s\n", obsError.Code)
- fmt.Printf("Message:%s\n", obsError.Message)
- }
- }
说明:
- 如果指定的范围无效(比如开始位置、结束位置为负数,大于文件大小),则会返回整个对象。
- 可以利用范围下载并发下载大对象,详细代码示例请参考concurrent_download_object_sample。
父主题:下载对象