You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
校验数据一致性
校验下载对象的一致性
复制全文
下载 pdf
校验下载对象的一致性
本文介绍通过 CRC64 校验下载对象一致性的方案及示例代码。​
方案说明​
在单次下载整个对象的场景中,调用 TOS API 接口下载对象完成后,将客户端计算出的已下载数据的 CRC64 与 TOS 返回的 CRC64 比较,从而保证下载数据的一致性。​
在 Range 下载场景,通过 Range 分片方式下载完整个对象后,组合各个 Range 分片的 CRC64 再与服务端返回的整个对象的 CRC64 做比对,进而保证最终下载对象的数据一致性。​
流程图​
​Image​​
示例代码​
​
Golang
Python
​
​
package main​
​
import (​
"context"​
"hash"​
"io"​
"io/ioutil"​
​
"github.com/volcengine/ve-tos-golang-sdk/v2/tos"​
)​
​
type crc64Reader struct {​
r io.Reader​
h hash.Hash64​
}​
​
func (cr *crc64Reader) Read(p []byte) (n int, err error) {​
n, err = cr.r.Read(p)​
cr.h.Write(p[:n])​
return n, err​
}​
​
func main() {​
var (​
accessKey = "your access key"​
secretKey = "your secret key"​
endpoint = "your endpoint"​
region = "your region"​
bucket = "bucketname"​
key = "objectname"​
)​
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
if err != nil {​
panic(err)​
}​
​
output, err := client.GetObjectV2(context.Background(), &tos.GetObjectV2Input{​
Bucket: bucket,​
Key: key,​
})​
​
defer output.Content.Close()​
p := make([]byte, 1024)​
crc64Hash := tos.NewCRC(tos.DefaultCrcTable(), 0)​
reader := &crc64Reader{​
r: output.Content,​
h: crc64Hash,​
}​
for {​
_, err = reader.Read(p)​
if err != nil {​
if err == io.EOF{​
break​
}​
panic(err)​
}​
}​
​
if output.HashCrc64ecma != crc64Hash.Sum64() {​
panic("crc64 not match")​
}​
}​
​
​
最近更新时间:2026.08.10 17:38:28
这个页面对您有帮助吗?
有用
有用
无用
无用