使用TOS-Go SDK 上传大于5GB的对象

前言

TOS提供两种上传方式,简单上传跟分片上传,简单上传方式最大能够上传5GB的文件,所以如果对象大小超过5GB,可以使用分片上传实现。

使用分片上传,您可以将对象分成多个数据块(Part)分别上传,每个分片都是对象数据的连续部分。您可以独立上传以及按任意顺序上传这些对象分片。如果其中任意分片上传失败,可以重新进行上传且不影响其他分片。上传完所有分片后,汇集所有分片并创建元数据。

分片上传优势:

  • 提高吞吐量 - 您可以并行上传分段以提高吞吐量。
  • 从网络问题中快速恢复 - 使用分片,可以将因网络问题导致的上传失败影响降至最低。
  • 暂停和恢复上传 - 您可以在一段时间内分别上传对象的分片。启用分片后,不存在过期期限;您需要显示完成或停止分片上传。

分片上传流程:

  • 初始化分片上传
  • 上传分片
  • 分片上传完成
关于实验
  • 预计部署时间:20分钟
  • 级别:初级
  • 相关产品:TOS
  • 受众: 通用
实验说明
  • 点击此链接登录控制台。

  • 如果您还没有账户,请点击此链接注册账户。

实验步骤

一、安装Go SDK 您可以使用如下命令安装Go SDK。

go get -u https://github.com/volcengine/ve-tos-golang-sdk

二、代码实现

本示例代码主要为使用分片上传超过5GB的对象,使用TOS Go 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、创建时间。

上传完成后,控制台显示如下: alt

参考文档: [1] TOS Go SDK

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

所属团队号:
相关资源
大模型解决方案白皮书:社交陪伴场景全流程落地指南
随着大模型技术持续突破,AI正加速重塑社交娱乐的形态与体验。其中,陪伴式聊天因用户黏性强、互动频次高,成为大模型商业化落地的关键赛道。随着模型能力跃升至万亿参数级,AI从工具属性正迈向情感交互生态,现象级产品的诞生条件逐渐成熟。 本白皮书聚焦AI陪伴聊天应用开发,面向“从何起步、如何落地”的新手困惑,系统拆解从需求定义到产品上线的关键流程。我们结合工程化实践路径,打造模块化知识体系与渐进式开发框架,帮助开发者在30天内完成从技术认知到产品原型的跃升,快速构建具备基础交互能力的Web或App应用,迈出大模型
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论