You need to enable JavaScript to run this app.
导航
上传资源
最近更新时间:2025.05.07 21:56:23首次发布时间:2024.02.07 11:43:45
我的收藏
有用
有用
无用
无用

阅读本文,您可以获取 Go SDK 上传资源的接口调用示例,实现快速开发。

调用说明

本文提供的接口调用示例均通过 AK 和 SK 初始化实例。

前提条件

调用接口前,请先完成 Go SDK 的安装及初始化操作。

注意事项

若服务内已经存在同名文件,且您开启了重名覆盖上传,则新上传文件在上传路径及文件名重复时将覆盖同名旧文件。若未开启重名覆盖上传,则新文件上传失败。

调用示例

本节为您介绍上传资源各方式的调用示例。

普通上传

您可以指定服务 ID 和上传文件,来获取上传成功的资源 URI。
该接口内部依次调用了 ApplyImageUploadCommitImageUpload 两个 OpenAPI 来实现完整文件上传能力。
接口调用示例如下所示。

package main


import (
    "fmt"
    "os"


    "github.com/volcengine/volc-sdk-golang/base"
    imagex "github.com/volcengine/volc-sdk-golang/service/imagex/v2"
)


// 上传文件
func main_UploadImages() {
    // 默认 ImageX 实例为 `cn-north-1`,如果您想使用其他区域的实例,请使用 `imagex.NewInstanceWithRegion(区域名)` 显式指定区域
    instance := imagex.DefaultInstance


    instance.SetCredential(base.Credentials{
        AccessKeyID:     "ak",
        SecretAccessKey: "sk",
    })


    params := &imagex.ApplyUploadImageParam{
        ServiceId: "service id", // 服务 ID
        // StoreKeys: []string{"example.jpg"}, // 指定文件存储名
        // UploadHost:     "",                      //指定上传域名,域名格式参考 https://www.volcengine.com/docs/508/1537728
        // ContentTypes:   []string{"image/jpg"},   //指定Content-Type
        // StorageClasses: []string{"ARCHIVE"},     //指定存储类型
        Overwrite: false, //是否进行上传覆盖
    }


    // 读取文件
    dat, err := os.ReadFile("image file")
    if err != nil {
        fmt.Printf("read file from %s error %v", "", err)
        os.Exit(-1)
    }


    // 上传文件
    resp, err := instance.UploadImages(params, [][]byte{dat})


    if err != nil {
        fmt.Printf("error %v", err)
    } else {
        fmt.Printf("success %v", resp)
    }
}

分片上传

对大于 20MB 的文件,您可以通过将文件数据分成多个分片(part)来同时分片上传,最后将所有上传的分片合并为一个文件并获取存储地址。每个分片固定为 20 MB,分片数量默认从 1 开始,最大为 10000。

说明

上传顺序不影响最终的合并分片操作。如果其中任意分片上传失败,可以重新进行上传且不影响其他分片。

package main


import (
    "context"
    "encoding/json"
    "fmt"
    "io"
    "log"
    "os"
    "time"


    "github.com/volcengine/volc-sdk-golang/base"
    imagex "github.com/volcengine/volc-sdk-golang/service/imagex/v2"
)


// 上传文件
func main_SegmentedUploadImages() {
    // 默认 ImageX 实例为 `cn-north-1`,如果您想使用其他区域的实例,请使用 `imagex.NewInstanceWithRegion(区域名)` 显式指定区域
    instance := imagex.DefaultInstance


    instance.SetCredential(base.Credentials{
        AccessKeyID:     "ak",
        SecretAccessKey: "sk",
    })


    params := &imagex.ApplyUploadImageParam{
        ServiceId: "service id", // 服务 ID
        // StoreKeys: []string{"example.jpg"}, // 指定文件存储名
        // UploadHost:     "",                      //指定上传域名
        // ContentTypes:   []string{"image/jpg"},   //指定Content-Type
        // StorageClasses: []string{"ARCHIVE"},     //指定存储类型
    }


    files := make([]io.Reader, 0)
    sizeArr := make([]int64, 0)
    addFile(params, &files, &sizeArr, "store_key1", "/path/to/file1")
    addFile(params, &files, &sizeArr, "store_key2", "/path/to/file2")


    startTime := time.Now()
    // 上传文件
    resp, err := instance.SegmentedUploadImages(context.Background(), params, files, sizeArr)
    takes := time.Since(startTime)


    if err != nil {
        fmt.Printf("error %v\n", err)
    } else {
        str, _ := json.Marshal(resp)
        fmt.Printf("success %s\n", string(str))
    }


    fmt.Printf("%v\n", takes)
}


func addFile(params *imagex.ApplyUploadImageParam, files *[]io.Reader, sizeArr *[]int64, storeKey string, filePath string) {
    // 读取文件
    file, err := os.Open(filePath)
    if err != nil {
        log.Fatal(err)
    }
    fileInfo, err := file.Stat()
    if err != nil {
        log.Fatal(err)
    }


    params.StoreKeys = append(params.StoreKeys, storeKey)
    *files = append(*files, file)
    *sizeArr = append(*sizeArr, fileInfo.Size())
}