You need to enable JavaScript to run this app.
文档中心
火山引擎入门实验

火山引擎入门实验

复制全文
下载 pdf
存储
使用Go SDK 将大文件分片上传至TOS
复制全文
下载 pdf
使用Go SDK 将大文件分片上传至TOS

本文介绍使用GO SDK 将大文件进行分片上传至 TOS。

前言

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

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

分片上传优势:

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

分片上传流程:

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

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

实验步骤

一、安装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、创建时间。

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

参考文档:
[1] TOS Go SDK

最近更新时间:2024.01.03 10:39:55
这个页面对您有帮助吗?
有用
有用
无用
无用