如何使用Go SDK在对象存储中分段上传并列举已上传的段?

Go SDK提供了对象存储分段上传的功能,允许开发者在上传大文件时将其分割成多个小段。该功能支持列举已上传的段,以便进行后续操作如续传或合并。这提高了文件上传的效率和可靠性。

对象存储分段上传列举已上传的段

对象存储分段上传列举已上传的段_分段上传列举已上传的段(Go SDK)
(图片来源网络,侵删)

分段上传是一种将大文件分解为多个小段,然后分别上传这些小段的方法,这种方法可以提高上传效率,减少失败的风险,并允许并行上传,在Go语言中,我们可以使用SDK来实现分段上传和列举已上传的段。

创建分段上传

我们需要创建一个分段上传,这可以通过调用SDK中的CreateMultipartUpload方法来实现,这个方法需要一个PutObjectOptions对象作为参数,其中包含了我们要上传的对象的信息,如桶名、对象键、元数据等。

import (
    "github.com/minio/miniogo/v7"
    "github.com/minio/miniogo/v7/pkg/credentials"
)
func main() {
    endpoint := "https://play.min.io:9000"
    accessKey := "Q3AM3UQ867SPQQAEXAMPLE"
    secretKey := "zuf+tfteSlswRu7BJ86wekitnwXbITMpJTO5y1火车"
    useSSL := true
    client, err := minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4(accessKey, secretKey, ""),
        Secure: useSSL,
    })
    if err != nil {
        log.Fatalln(err)
    }
    bucketName := "mybucket"
    objectName := "myobject"
    contentType := "application/octetstream"
    // 创建分段上传
    uploadID, err := client.InitiateMultipartUpload(context.Background(), bucketName, objectName, minio.InitiateMultipartUploadParameters{
        ContentType:  contentType,
        ContentLength: int64(totalSize), // 总大小
    })
    if err != nil {
        log.Fatalln(err)
    }
}

上传分段

我们可以开始上传分段,每个分段都是一个独立的上传请求,需要指定分段的索引和数据,我们可以使用UploadPart方法来上传分段。

import (
    "github.com/minio/miniogo/v7"
    "github.com/minio/miniogo/v7/pkg/credentials"
)
func main() {
    endpoint := "https://play.min.io:9000"
    accessKey := "Q3AM3UQ867SPQQAEXAMPLE"
    secretKey := "zuf+tfteSlswRu7BJ86wekitnwXbITMpJTO5y1火车"
    useSSL := true
    client, err := minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4(accessKey, secretKey, ""),
        Secure: useSSL,
    })
    if err != nil {
        log.Fatalln(err)
    }
    bucketName := "mybucket"
    objectName := "myobject"
    uploadID := "myuploadID"
    // 上传第i个分段
    partNumber := i // 分段索引,从1开始
    data := []byte("some data") // 分段数据
    _, err = client.UploadPart(context.Background(), bucketName, objectName, uploadID, partNumber, data, minio.PutObjectOptions{ContentType: "application/octetstream"})
    if err != nil {
        log.Fatalln(err)
    }
}

列举已上传的段

在分段上传过程中,我们可能需要查看已经上传了哪些分段,这可以通过调用ListParts方法来实现。

对象存储分段上传列举已上传的段_分段上传列举已上传的段(Go SDK)
(图片来源网络,侵删)
import (
    "github.com/minio/miniogo/v7"
    "github.com/minio/miniogo/v7/pkg/credentials"
)
func main() {
    endpoint := "https://play.min.io:9000"
    accessKey := "Q3AM3UQ867SPQQAEXAMPLE"
    secretKey := "zuf+tfteSlswRu7BJ86wekitnwXbITMpJTO5y1火车"
    useSSL := true
    client, err := minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4(accessKey, secretKey, ""),
        Secure: useSSL,
    })
    if err != nil {
        log.Fatalln(err)
    }
    bucketName := "mybucket"
    objectName := "myobject"
    uploadID := "myuploadID"
    // 列举已上传的段
    parts, err := client.ListParts(context.Background(), bucketName, objectName, uploadID)
    if err != nil {
        log.Fatalln(err)
    }
    for _, part := range parts {
        fmt.Printf("Part #%d, ETag: %s
", part.PartNumber, part.ETag)
    }
}

这段代码会输出已上传的每个分段的索引和ETag,ETag是服务器为每个分段生成的唯一标识符,用于验证分段的完整性。

对象存储分段上传列举已上传的段_分段上传列举已上传的段(Go SDK)
(图片来源网络,侵删)

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/830063.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希未希
上一篇 2024-08-02 11:14
下一篇 2024-08-02 11:17

相关推荐

  • c# json对象存储

    在C#中,你可以使用System.Text.Json命名空间下的JsonSerializer类来将对象序列化为JSON字符串并存储。“csharp,using System;,using System.Text.Json;public class Person,{, public string Name { get; set; }, public int Age { get; set; },}class Program,{, static void Main(), {, Person person = new Person { Name = “John”, Age = 30 };, string jsonString = JsonSerializer.Serialize(person);, Console.WriteLine(jsonString);, },},“

    2025-02-24
    018
  • cdn oss

    CDN(内容分发网络)和OSS(对象存储服务)是两种不同的技术,前者用于加速网站访问,后者用于存储数据。

    2025-02-19
    038
  • 存储视频用什么数据库

    存储视频常用的数据库有 MySQL、PostgreSQL 等关系型数据库,以及 MongoDB、Cassandra 等非关系型数据库。关系型数据库适合结构化数据管理与事务处理;非关系型数据库在处理大规模视频数据和高并发读写方面有优势,具体选择取决于实际需求与应用场景。

    2025-02-16
    027
  • oss cdn

    OSS(对象存储服务)提供数据存储,CDN(内容分发网络)加速内容分发,两者结合可优化资源访问速度。

    2025-02-13
    024

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入