You need to enable JavaScript to run this app.
文档中心
文档控制台
注册
veImageX

veImageX

复制全文
下载 pdf
Golang SDK
上传资源
复制全文
下载 pdf
上传资源

阅读本文,您可以获取 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())
}
最近更新时间:2025.05.07 21:56:23
这个页面对您有帮助吗?
有用
有用
无用
无用