本文介绍使用GO SDK 将大文件进行分片上传至 TOS。
TOS提供两种上传方式,简单上传跟分片上传,简单上传方式最大能够上传5GB的文件,所以如果对象大小超过5GB,可以使用分片上传实现。
使用分片上传,您可以将对象分成多个数据块(Part)分别上传,每个分片都是对象数据的连续部分。您可以独立上传以及按任意顺序上传这些对象分片。如果其中任意分片上传失败,可以重新进行上传且不影响其他分片。上传完所有分片后,汇集所有分片并创建元数据。
分片上传优势:
分片上传流程:
一、安装Go SDK
您可以使用如下命令安装Go SDK。
go get -u https://github.com/volcengine/ve-tos-golang-sdk
二、代码实现
本示例代码主要为使用SDK 进行分片上传大文件。
示例代码如下:
package main import ( "bufio" "bytes" "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/tos" "io" "os" ) var( endpoint = "tos-cn-beijing.volces.com" accessKey = "xxxxxxxx"//替换为您的AK secretKey = "xxxxxxxx"//替换为您的SK region = "cn-beijing" ) func check(err error, message string) { if err != nil { fmt.Printf("%s err: %s\n", message, err.Error()) os.Exit(1) } } func main(){ // 初始化客户端 client, err := tos.NewClient(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) check(err,"NewClient") handle, err := client.Bucket("wanyix-support") check(err,"Bucket") // 分片上传 //定义上传对象的文件名 key := "Windows7.iso" //初始化分片上传 upload, err := handle.CreateMultipartUpload(context.Background(), key) check(err,"CreateMultiupload") // 指定本地文件路径 filepath := "/Users/bytedance/Downloads/Windows 7.iso" fi,err := os.Open(filepath) if err != nil{ fmt.Println(err.Error()) panic(err) } defer fi.Close() // 使用bufio进行读取 reader := bufio.NewReader(fi) //创建一个1G的buf,可根据您自己系统配置进行调整,如调整为100MB buf := make([]byte,1073741824) var a []tos.MultipartUploadedPart i := 1 for { n, err := reader.Read(buf) fmt.Println(n) if err != nil && err != io.EOF { panic(err) } if 0 == n{ break } fmt.Println("读完成") part, err := handle.UploadPart(context.Background(), &tos.UploadPartInput{ Key: key, UploadID: upload.UploadID, PartSize: int64(n), PartNumber: i, Content: bytes.NewReader(buf), }) if err !=nil{ panic(err) } fmt.Println(i) i = i + 1 fmt.Println("上传完成") a = append(a, part) } _, err = handle.CompleteMultipartUpload(context.Background(), &tos.CompleteMultipartUploadInput{ Key: key, UploadID: upload.UploadID, UploadedParts: a, }) check(err,"CompleteMultipartUpload") }
程序执行后,您可以在TOS控制台-对应桶-文件列表-分片管理,查看目前正在进行的分片任务,包括文件名称、上传ID、创建时间。
上传完成后,控制台显示如下:
参考文档:
[1] TOS Go SDK