Skip to content

Latest commit

 

History

History
55 lines (45 loc) · 1.62 KB

get_object_by_segment_zh-CN.md

File metadata and controls

55 lines (45 loc) · 1.62 KB

大文件分段下载

代码片段

使用您的 AccessKeyID 和 SecretAccessKey 初始化 Qingstor 对象。

import (
	"github.com/qingstor/qingstor-sdk-go/v4/config"
	"github.com/qingstor/qingstor-sdk-go/v4/service"
)

var conf, _ = config.New("YOUR-ACCESS-KEY-ID", "YOUR--SECRET-ACCESS-KEY")
var qingStor, _ = service.Init(conf)

然后根据要操作的 bucket 信息(zone, bucket name)来初始化 Bucket。

	bucketName := "your-bucket-name"
	zoneName := "pek3b"
	bucketService, _ := qingStor.Bucket(bucketName, zoneName)

请注意 GetObjectInput 中 field 不是必须设置的,这里必须手动设置的参数是 Range 参数。具体可以参考官方 API 文档

然后调用 GetObject 方法下载对象,将 5M 设置为分段大小。objectKey 设置要获取的对象的 filepath(位于当前 bucket 中)。

	objectKey := "your_zip_fetch_with_seg.zip"
	partSize := 1024 * 1024 * 5 // 5M every part.
	for i := 0; ; i++ {
		lo := partSize * i
		hi := partSize*(i+1) - 1
		byteRange := fmt.Sprintf("bytes=%d-%d", lo, hi)
		input := &service.GetObjectInput{
			Range: &byteRange,
		}
		output, err := bucketService.GetObject(objectKey, input)
		if err != nil {
			panic(err)
		}
		f, _ := os.OpenFile("/tmp/"+objectKey, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
		data, _ := ioutil.ReadAll(output.Body)
		_, err = f.Write(data)
		if err := f.Close(); err != nil {
			log.Fatal(err)
		}
		if len(data) < partSize {
			break
		}
	}

文件将被保存至 /tmp/{objectKey}(请替换为您的 objectKey)。