ufsdk

package module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2023 License: Apache-2.0 Imports: 21 Imported by: 18

README

UCloud 对象存储 SDK GoDoc

Software License

Modules are interface and implementation.
The best modules are where interface is much simpler than implementation.
By: John Ousterhout

Table of Contents

概述

US3 对象存储基本概念

在对象存储系统中,存储空间(Bucket)是文件(File)的组织管理单位,文件(File)是存储空间的逻辑存储单元。对于每个账号,该账号里存放的每个文件都有唯一的一对存储空间(Bucket)与键(Key)作为标识。我们可以把 Bucket 理解成一类文件的集合,Key 理解成文件名。由于每个 Bucket 需要配置和权限不同,每个账户里面会有多个 Bucket。在 US3 里面,Bucket 主要分为公有和私有两种,公有 Bucket 里面的文件可以对任何人开放,私有 Bucket 需要配置对应访问签名才能访问。

签名

本 SDK 接口是基于 HTTP 的,为了连接的安全性,US3 使用 HMAC SHA1 对每个连接进行签名校验。使用本 SDK 可以忽略签名相关的算法过程,只要把公私钥写入到配置文件里面,读取并传给 UFileRequest 里面的 New 方法即可。签名相关的算法与详细实现请见 Auth 模块

快速使用

下载安装

环境要求
  • Golang 版本 (待校验)
SDK下载
配置文件
{
    "说明1":"管理 bucket 创建和删除必须要公私钥(见 https://console.ucloud.cn/uapi/apikey),如果只做文件上传和下载用 TOEKN (见 https://console.ucloud.cn/ufile/token)就够了,为了安全,强烈建议只使用 TOKEN 做文件管理",
    "public_key":"",
    "private_key":"",

    "说明2":"以下两个参数是用来管理文件用的。对应的是 file.go 里面的接口,file_host 是不带 bucket 名字的。比如:北京地域的host填cn-bj.ufileos.com,而不是填 bucketname.cn-bj.ufileos.com。若为自定义域名,请直接带上 http 开头的 URL。如:http://example.com",
    "bucket_name":"",
    "file_host":"",

    "说明3":"verifyUploadMD5 用于数据完整性校验,默认不开启,若要开启请置为true",
    "verifyUploadMD5": false
}

密钥可以在控制台中 API 产品 - API 密钥,点击显示 API 密钥获取。将 public_key 和 private_key 分别赋值给相关变量后,SDK即可通过此密钥完成鉴权。请妥善保管好 API 密钥,避免泄露。 token(令牌)是针对指定bucket授权的一对公私钥。可通过token进行授权bucket的权限控制和管理。可以在控制台中对象存储US3-令牌管理,点击创建令牌获取。

运行demo
导入使用

在您的项目代码中,使用import ufsdk "github.com/ufilesdk-dev/ufile-gosdk"引入US3 Go SDK的包

示例代码

存储空间管理

创建存储空间
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewBucketRequest(config, nil)
if err != nil {
	panic(err.Error())
}

bucketRet, err := req.CreateBucket("BucketName", "Region", "BucketType", "ProjectId")
if err != nil {
	log.Fataf("创建 bucket 出错,错误信息为:%s\n", err.Error())
}

回到目录

获取存储空间信息
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewBucketRequest(config, nil)
if err != nil {
	panic(err.Error())
}

bucketList, err := req.DescribeBucket("BucketName", Offset, Limit, "ProjectId")
if err != nil {
	log.Println("获取 bucket 信息出错,错误信息为:", err.Error())
}

回到目录

更新存储空间访问类型
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewBucketRequest(config, nil)
if err != nil {
	panic(err.Error())
}

bucketRet, err = req.UpdateBucket("BucketName", "BucketType", "ProjectId")
if err != nil {
	log.Println("更新 bucket 信息失败,错误信息为:", err.Error())
}

回到目录

删除存储空间
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewBucketRequest(config, nil)
if err != nil {
	panic(err.Error())
}

bucketRet, err = req.DeleteBucket("BucketName", "ProjectId")
if err != nil {
	log.Fataf("删除 bucket 失败,错误信息为:", err.Error())
}

回到目录

对象/文件管理

普通上传
  • demo程序
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}

err = req.PutFile("FilePath", "KeyName", "MimeType")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

表单上传
  • demo程序
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}

err = req.PostFile("FilePath", "KeyName", "MimeType")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

秒传
  • demo程序
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}

err = req.UploadHit("FilePath", "KeyName")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

流式上传
  • demo程序
if err != nil {
    log.Fatal(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
    log.Fatal(err.Error())
}
// 流式上传本地小文件
f, err := os.Open("FilePath")
if err != nil {
    panic(err.Error())
}
err = req.IOPut(f, "KeyName", "")
f.Close()
if err != nil {
    log.Fatalf("%s\n", req.DumpResponse(true))
}

// 流式上传大文件
f1, err := os.Open("FilePath1")
if err != nil {
    panic(err.Error())
}
err = req.IOMutipartAsyncUpload(f1, "KeyName", "")
f1.Close()
if err != nil {
    log.Fatalf("%s\n", req.DumpResponse(true))
}

回到目录

分片上传
  • demo程序
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}

err = req.MPut("FilePath", "KeyName", "MimeType")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

上传回调
  • demo程序
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}

// 同步分片上传回调
err = req.MPutWithPolicy("FilePath", "KeyName", "MimeType", "Policy")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

// 异步分片上传回调
err = req.AsyncMPutWithPolicy("FilePath", "KeyName", "MimeType", "Policy")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

// 异步分片并发上传回调
jobs := 20 // 并发数为 20
err = req.AsyncUploadWithPolicy("FilePath", "KeyName", "MimeType", jobs, "Policy")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

文件下载
  • demo程序
// 加载配置,创建请求
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
// 普通下载
err = req.Download("DownLoadURL")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}
// 流式下载
err = req.Download("buffer", "KeyName")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

查询文件基本信息
  • demo程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
err = req.HeadFile("KeyName")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

删除文件
  • demo程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
err = req.DeleteFile("KeyName")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

文件解冻
  • demo 程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
err = req.Restore("KeyName")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

文件存储类型转换
  • demo 程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
err = req.ClassSwitch("KeyName", "StorageClass")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

比较本地文件和远程文件etag
  • demo程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
err = req.CompareFileEtag("KeyName", "FilePath")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

文件拷贝
  • demo程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
err = req.Copy("DstkeyName", "SrcBucketName", "SrcKeyName")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

文件重命名
  • demo程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
force := true // 为true则强制重命名
err = req.Rename("KeyName", "KeyName", force)
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

前缀列表查询
  • demo 程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
list, err := req.PrefixFileList("Prefix", "Marker", "Limit")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

获取目录文件列表
  • demo 程序
config, err := ufsdk.LoadConfig("config.json")
if err != nil {
	panic(err.Error())
}
req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
	panic(err.Error())
}
list, err := req.ListObjects("Prefix", "Marker", "Delimiter", "MaxKeys")
if err != nil {
	log.Println("DumpResponse:", string(req.DumpResponse(true)))
}

回到目录

文档说明

本 SDK 使用 godoc 约定的方法对每个 export 出来的接口进行注释。 你可以直接访问生成好的在线文档

联系我们

许可证

Apache License 2.0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetFileEtag

func GetFileEtag(path string) string

GetFileEtag 获取文件的 etag 值

func GetFileMimeType

func GetFileMimeType(path string) string

GetFileMimeType 获取文件的 mime type 值,接收文件路径作为参数。如果检测不到,则返回空。

func VerifyHTTPCode

func VerifyHTTPCode(code int) bool

VerifyHTTPCode 检查 HTTP 的返回值是否为 2XX,如果不是就返回 false。

Types

type Auth

type Auth struct {
	// contains filtered or unexported fields
}

Auth 构造签名的工具,使用本 SDK 你不需要关心 Auth 这一整个模块,以及它暴露出来的签名算法。 如果你希望自己封装 API 可以使用这里面的暴露出来的接口来填充 http authorization。

func NewAuth

func NewAuth(publicKey, privateKey string) Auth

NewAuth 构造一个新的签名工具,传入你的公钥匙和私钥。

func (Auth) Authorization

func (A Auth) Authorization(method, bucket, key string, header http.Header) string

Authorization 构造一个主要用于上传文件的签名,返回 HMAC-Sh1 的签名字符串,可以直接填充到 HTTP authorization header 里面。 key 是传到 ufile 所使用的文件名,bucekt 是文件上传后存放的 bucket。 method 就是你当前这个 HTTP 请求的 Method。 header 就是你当前这个 HTTP 的 header。

func (Auth) AuthorizationBucketMgr

func (A Auth) AuthorizationBucketMgr(query url.Values) string

AuthorizationBucketMgr 生成用于管理 bucket 的签名。

func (Auth) AuthorizationPolicy

func (A Auth) AuthorizationPolicy(method, bucket, key, policy string, header http.Header) string

AuthorizationPolicy 构造支持回调策略的签名,policy 是经过 base64 编码后的 json string。 本签名函数就是多了一个 policy 字段,其他的参数和 Authoriazation 一样。

func (Auth) AuthorizationPrivateURL

func (A Auth) AuthorizationPrivateURL(method, bucket, key, expires string, header http.Header) (string, string)

AuthorizationPrivateURL 构造私有空间文件下载链接的签名,其中 expires 是当前的时间加上一个过期的时间,再转为字符串。格式是 unix time second. 其他的参数含义和 Authoriazation 函数一样。 有时我们需要把签名后的 URL 直接拿来用,header 参数可以直接构造一个空的 http.Header{} 传入即可。

func (Auth) CanonicalizedUcloudHeaders

func (A Auth) CanonicalizedUcloudHeaders(ucloudHeader http.Header) string

CanonicalizedUcloudHeaders 用于将自定义请求报头规范化为string ucloudHeader 支持自定义请求头

type BucketDataSet

type BucketDataSet struct {
	BucketName    string    `json:"BucketName,omitempty"`
	BucketID      string    `json:"BucketId,omitempty"`
	Domain        DomainSet `json:"Domain,omitempty"`
	Type          string    `json:"Type,omitempty"`
	CreateTime    int       `json:"CreateTime,omitempty"`
	ModifyTime    int       `json:"ModifyTime,omitempty"`
	CdnDomainID   []string  `json:"CdnDomainId,omitempty"`
	Biz           string    `json:"Biz,omitempty"`
	Region        string    `json:"Region,omitempty"`
	HasUserDomain int       `json:"HasUserDomain,omitempty"`
}

BucketDataSet 用于 BucketListResponse 里面的 DataSet 字段

type BucketListResponse

type BucketListResponse struct {
	RetCode int             `json:"RetCode,omitempty"`
	Action  string          `json:"Action,omitempty"`
	Message string          `json:"Message,omitempty"`
	DataSet []BucketDataSet `json:"DataSet,omitempty"`
}

BucketListResponse 用于 DescribeBucket 返回的数据。

func (BucketListResponse) Error

func (b BucketListResponse) Error() error

func (BucketListResponse) String

func (b BucketListResponse) String() string

String 把 BucketListResponse 里面的字段格式化。

type BucketResponse

type BucketResponse struct {
	RetCode    int    `json:"RetCode,omitempty"`
	Action     string `json:"Action,omitempty"`
	BucketName string `json:"BucketName,omitempty"`
	BucketID   string `json:"BucketId,omitempty"`
	Message    string `json:"Message,omitempty"`
}

BucketResponse 用于 Bucket 模块返回的数据。

func (BucketResponse) Error

func (b BucketResponse) Error() error

func (BucketResponse) String

func (b BucketResponse) String() string

type CommonPreInfo

type CommonPreInfo struct {
	Prefix string `json:"Prefix,omitempty"`
}

CommonPreInfo 用于 ListObjectsResponse 里面的 CommonPrefixes 字段 Prefix 以Delimiter结尾的公共前缀目录名

type Config

type Config struct {
	PublicKey       string `json:"public_key"`
	PrivateKey      string `json:"private_key"`
	BucketHost      string `json:"bucket_host"`
	BucketName      string `json:"bucket_name"`
	FileHost        string `json:"file_host"`
	VerifyUploadMD5 bool   `json:"verfiy_upload_md5"`
	Endpoint        string `json:"endpoint"`
}

Config 配置文件序列化所需的全部字段

func LoadConfig

func LoadConfig(jsonPath string) (*Config, error)

LoadConfig 从配置文件加载一个配置。

type DomainSet

type DomainSet struct {
	Src       []string `json:"Src,omitempty"`
	Cdn       []string `json:"Cdn,omitempty"`
	CustomSrc []string `json:"CustomSrc,omitempty"`
	CustomCdn []string `json:"CustomCdn,omitempty"`
}

DomainSet 用于 BucketDataSet 里面的 Domain 字段

type FileDataSet

type FileDataSet struct {
	BucketName    string `json:"BucketName,omitempty"`
	FileName      string `json:"FileName,omitempty"`
	Hash          string `json:"Hash,omitempty"`
	MimeType      string `json:"MimeType,omitempty"`
	FirstObject   string `json:"first_object,omitempty"`
	Size          int    `json:"Size,omitempty"`
	CreateTime    int    `json:"CreateTime,omitempty"`
	ModifyTime    int    `json:"ModifyTime,omitempty"`
	StorageClass  string `json:"StorageClass,omitempty"`
	RestoreStatus string `json:"RestoreStatus,omitempty"`
}

FileDataSet 用于 FileListResponse 里面的 DataSet 字段。

type FileListResponse

type FileListResponse struct {
	BucketName string        `json:"BucketName,omitempty"`
	BucketID   string        `json:"BucketId,omitempty"`
	NextMarker string        `json:"NextMarker,omitempty"`
	DataSet    []FileDataSet `json:"DataSet,omitempty"`
}

FileListResponse 用 PrefixFileList 接口返回的 list 数据。

func (FileListResponse) String

func (f FileListResponse) String() string

type FilePart

type FilePart struct {
	Number int   // Part number
	Offset int64 // Part offset
	Size   int64 // Part size
}

FilePart is the file part definition

func SplitFileByPartSize

func SplitFileByPartSize(fileSize, partSize int64) ([]FilePart, error)

SplitFileByPartSize splits big file into parts by the size of parts. Splits the file by the part size. Returns the FilePart when error is nil.

type ListObjectsResponse

type ListObjectsResponse struct {
	Name           string          `json:"Name,omitempty"`
	Prefix         string          `json:"Prefix,omitempty"`
	MaxKeys        string          `json:"MaxKeys,omitempty"`
	Delimiter      string          `json:"Delimiter,omitempty"`
	IsTruncated    bool            `json:"IsTruncated,omitempty"`
	NextMarker     string          `json:"NextMarker,omitempty"`
	Contents       []ObjectInfo    `json:"Contents,omitempty"`
	CommonPrefixes []CommonPreInfo `json:"CommonPrefixes,omitempty"`
}

ListObjectsResponse 用 ListObjects 接口返回的 list 数据。 Name Bucket名称 Prefix 查询结果的前缀 MaxKeys 查询结果的最大数量 Delimiter 查询结果的目录分隔符 IsTruncated 返回结果是否被截断。若值为true,则表示仅返回列表的一部分,NextMarker可作为之后迭代的游标 NextMarker 可作为查询请求中的的Marker参数,实现迭代查询 Contents 文件列表 CommonPrefixes 以Delimiter结尾,并且有共同前缀的目录列表

func (ListObjectsResponse) String

func (f ListObjectsResponse) String() string

type MultipartState

type MultipartState struct {
	BlkSize int //服务器返回的分片大小
	// contains filtered or unexported fields
}

MultipartState 用于保存分片上传的中间状态

func (*MultipartState) UnmarshalJSON

func (m *MultipartState) UnmarshalJSON(bytes []byte) error

UnmarshalJSON custom unmarshal json

type ObjectInfo

type ObjectInfo struct {
	Key          string            `json:"Key,omitempty"`
	MimeType     string            `json:"MimeType,omitempty"`
	LastModified int               `json:"LastModified,omitempty"`
	CreateTime   int               `json:"CreateTime,omitempty"`
	Etag         string            `json:"Etag,omitempty"`
	Size         string            `json:"Size,omitempty"`
	StorageClass string            `json:"StorageClass,omitempty"`
	UserMeta     map[string]string `json:"UserMeta,omitempty"`
}

ObjectInfo 用于 ListObjectsResponse 里面的 Contents 字段 Key 文件名称 MimeType 文件mimetype LastModified 文件最后修改时间 CreateTime 文件创建时间 ETag 标识文件内容 Size 文件大小 StorageClass 文件存储类型 UserMeta 用户自定义元数据

type UFileRequest

type UFileRequest struct {
	Auth       Auth
	BucketName string
	Host       string
	Client     *http.Client
	Context    context.Context

	RequestHeader http.Header

	LastResponseStatus int
	LastResponseHeader http.Header
	LastResponseBody   []byte
	// contains filtered or unexported fields
}

UFileRequest SDK 主要的 request 模块。本 SDK 遵从以下原则:

1.接口尽可能简洁,隐藏所有复杂实现。

2.本 SDK 主要的作用是封装 HTTP 请求,不做过多其他的封装(如 HTTP Body 序列化,详细的错误检查)。

3.只简单封装 HTTP 请求所需要的参数,给接口使用者提供所有原生的 HTTP response header,body,status code 返回,以便排错。

4.远端请求返回值统一返回一个 error,如果为 nil 表示无错。LastResponseStatus,LastResponseHeader,LastResponseBody 可以查看具体的 HTTP 返回信息()。如果你想少敲几行代码可以直接调用 DumpResponse(true) 查看详细返回。

func NewBucketRequest

func NewBucketRequest(config *Config, client *http.Client) (*UFileRequest, error)

NewBucketRequest 创建一个用于管理 bucket 的 request。 注意:不要拿它去调用文件管理的 request,我文件管理和 bucket 管理接口放到一个 request 里面的目的就是让接口更统一,代码更清晰,简洁。 config 参数里面包含了公私钥,以及其他必填的参数。详情见 config 相关文档。

func NewFileRequest

func NewFileRequest(config *Config, client *http.Client) (*UFileRequest, error)

NewFileRequest 创建一个用于管理文件的 request,管理文件的 url 与 管理 bucket 接口不一样, 请将 bucket 和文件管理所需要的分开,NewUBucketRequest 是用来管理 bucket 的。 Request 创建后的 instance 不是线程安全的,如果你需要做并发的操作,请创建多个 UFileRequest。 config 参数里面包含了公私钥,以及其他必填的参数。详情见 config 相关文档。 client 这里你可以传空,会使用默认的 http.Client。如果你需要设置超时以及一些其他相关的网络配置选项请传入一个自定义的 client。

func NewFileRequestWithHeader

func NewFileRequestWithHeader(config *Config, header http.Header, client *http.Client) (*UFileRequest, error)

NewFileRequestWithHeader 创建一个可携带用户自定义http请求头的 request Request 创建后的 instance 不是线程安全的,如果你需要做并发的操作,请创建多个 UFileRequest。 config 参数里面包含了公私钥,以及其他必填的参数。详情见 config 相关文档。 header 自定义http请求头 client 这里你可以传空,会使用默认的 http.Client。如果你需要设置超时以及一些其他相关的网络配置选项请传入一个自定义的 client。

func (*UFileRequest) AbortMultipartUpload

func (u *UFileRequest) AbortMultipartUpload(state *MultipartState) error

AbortMultipartUpload 取消分片上传,如果掉用 UploadPart 出现错误,可以调用本函数取消分片上传。 state 参数是 InitiateMultipartUpload 返回的

func (*UFileRequest) AsyncMPut

func (u *UFileRequest) AsyncMPut(filePath, keyName, mimeType string) error

AsyncMPut 异步分片上传一个文件,filePath 是本地文件所在的路径,内部会自动对文件进行分片上传,上传的方式是使用异步的方式同时传多个分片的块。 mimeType 如果为空的话,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 大于 100M 的文件推荐使用本接口上传。 同时并发上传的分片数量为10

func (*UFileRequest) AsyncMPutWithPolicy

func (u *UFileRequest) AsyncMPutWithPolicy(filePath, keyName, mimeType string, policy_json string) error

AsyncMPut 异步分片上传一个文件,filePath 是本地文件所在的路径,内部会自动对文件进行分片上传,上传的方式是使用异步的方式同时传多个分片的块。 mimeType 如果为空的话,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 大于 100M 的文件推荐使用本接口上传。 同时并发上传的分片数量为10

func (*UFileRequest) AsyncUpload

func (u *UFileRequest) AsyncUpload(filePath, keyName, mimeType string, jobs int) error

AsyncUpload AsyncMPut 的升级版, jobs 表示同时并发的数量。

func (*UFileRequest) AsyncUploadWithPolicy

func (u *UFileRequest) AsyncUploadWithPolicy(filePath, keyName, mimeType string, jobs int, policy_json string) error

AsyncUpload AsyncMPut 的升级版, jobs 表示同时并发的数量。

func (*UFileRequest) ClassSwitch

func (u *UFileRequest) ClassSwitch(keyName string, storageClass string) (err error)

ClassSwitch 存储类型转换接口 keyName 文件名称 storageClass 所要转换的新文件存储类型,目前支持的类型分别是标准:"STANDARD"、低频:"IA"、冷存:"ARCHIVE"

func (*UFileRequest) CompareFileEtag

func (u *UFileRequest) CompareFileEtag(remoteKeyName, localFilePath string) bool

CompareFileEtag 检查远程文件的 etag 和本地文件的 etag 是否一致

func (*UFileRequest) Copy

func (u *UFileRequest) Copy(dstkeyName, srcBucketName, srcKeyName string) (err error)

Copy 从同组织下的源Bucket中拷贝指定文件到目的Bucket中,并以新文件名命名 dstkeyName 拷贝到目的Bucket后的新文件名 srcBucketName 待拷贝文件所在的源Bucket名称 srcKeyName 待拷贝文件名称

func (*UFileRequest) CreateBucket

func (u *UFileRequest) CreateBucket(bucketName, region, bucketType, projectID string) (bucket BucketResponse, err error)

CreateBucket 创建一个 bucket, bucketName 必须全部为小写字母,不能带符号和特殊字符。

region 表示 ufile 所在的可用区,目前支持北京,香港,广州,上海二,雅加达,洛杉矶。一下是可用区值的映射:

北京 cn-bj

广州 cn-gd

可用区以控制台列出来的为准,更多可用区具体的值在 https://docs.ucloud.cn/api/summary/regionlist 查看。

bucketType 可以填 public(公有空间) 和 private(私有空间) projectID bucket 所在的项目 ID,可为空。

func (*UFileRequest) DeleteBucket

func (u *UFileRequest) DeleteBucket(bucketName, projectID string) (bucket BucketResponse, err error)

DeleteBucket 删除一个 bucket,如果成功,status code 会返回 204 no-content

func (*UFileRequest) DeleteFile

func (u *UFileRequest) DeleteFile(keyName string) error

DeleteFile 删除一个文件,如果删除成功 statuscode 会返回 204,否则会返回 404 表示文件不存在。 keyName 表示传到 ufile 的文件名。

func (*UFileRequest) DescribeBucket

func (u *UFileRequest) DescribeBucket(bucketName string, offset, limit int, projectID string) (list BucketListResponse, err error)

DescribeBucket 获取 bucket 的详细信息,如果 bucketName 为空,返回当前账号下所有的 bucket。 limit 是限制返回的 bucket 列表数量。 offset 是列表的偏移量,默认为 0。 projectID 可为空。

func (*UFileRequest) Download

func (u *UFileRequest) Download(reqURL string) error

Download 把文件下载到 HTTP Body 里面,这里只能用来下载小文件,建议使用 DownloadFile 来下载大文件。

func (*UFileRequest) DownloadFile

func (u *UFileRequest) DownloadFile(writer io.Writer, keyName string) error

Download 文件下载接口, 对下载大文件比较友好;支持流式下载

func (*UFileRequest) DownloadFileWithIopString

func (u *UFileRequest) DownloadFileWithIopString(writer io.Writer, keyName string, iopcmd string) error

DownloadFileWithIopString 支持下载iop,直接指定iop命令字符串

func (*UFileRequest) DumpResponse

func (u *UFileRequest) DumpResponse(isDumpBody bool) []byte

DumpResponse dump 当前请求的返回结果,里面有一个 print 函数,会把 body,header,status code 直接输出到 stdout。 如果你需要 Dump 到其他的地方,直接拿返回值即可。

func (*UFileRequest) FinishMultipartUpload

func (u *UFileRequest) FinishMultipartUpload(state *MultipartState) error

FinishMultipartUpload 完成分片上传。分片上传必须要调用的接口。 state 参数是 InitiateMultipartUpload 返回的

func (*UFileRequest) FinishMultipartUploadWithPolicy

func (u *UFileRequest) FinishMultipartUploadWithPolicy(state *MultipartState, policy_json string) error

FinishMultipartUpload 完成分片上传。分片上传必须要调用的接口。 state 参数是 InitiateMultipartUpload 返回的

func (*UFileRequest) GetPrivateURL

func (u *UFileRequest) GetPrivateURL(keyName string, expiresDuation time.Duration) string

GetPrivateURL 获取私有空间的文件下载 URL。 keyName 表示传到 ufile 的文件名。 expiresDuation 表示下载链接的过期时间,从现在算起,24 * time.Hour 表示过期时间为一天。

func (*UFileRequest) GetPublicURL

func (u *UFileRequest) GetPublicURL(keyName string) string

GetPublicURL 获取公有空间的文件下载 URL keyName 表示传到 ufile 的文件名。

func (*UFileRequest) HeadFile

func (u *UFileRequest) HeadFile(keyName string) error

HeadFile 获取一个文件的基本信息,返回的信息全在 header 里面。包含 mimeType, content-length(文件大小), etag, Last-Modified:。 keyName 表示传到 ufile 的文件名。

func (*UFileRequest) IOMutipartAsyncUpload

func (u *UFileRequest) IOMutipartAsyncUpload(reader io.Reader, keyName, mimeType string) (err error)

IOMutipartAsyncUpload 流式分片上传接口,你必须确保你的 reader 接口每次调用是递进式的调用,也就是像文件那样的读取方式。 mimeType 在这里的检测不会很准确,你可以手动指定更精确的 mimetype。 这里的会每次读取4M 的数据到 buffer 里面,适用于大量数据上传。

func (*UFileRequest) IOPut

func (u *UFileRequest) IOPut(reader io.Reader, keyName, mimeType string) (err error)

IOPut 流式 put 上传接口,你必须确保你的 reader 接口每次调用是递进式的调用,也就是像文件那样的读取方式。 mimeType 在这里的检测不会很准确,你可以手动指定更精确的 mimetype。 这里的 reader 接口会把数据全部读到 HTTP Body 里面,如果你接口的数据特别大,请使用 IOMutipartAsyncUpload 接口。

func (*UFileRequest) InitiateMultipartUpload

func (u *UFileRequest) InitiateMultipartUpload(keyName, mimeType string) (*MultipartState, error)

InitiateMultipartUpload 初始化分片上传,返回一个 state 用于后续的 UploadPart, FinishMultipartUpload, AbortMultipartUpload 的接口。

keyName 表示传到 ufile 的文件名。

mimeType 表示文件的 mimeType, 传空会报错,你可以使用 GetFileMimeType 方法检测文件的 mimeType。如果您上传的不是文件,您可以使用 http.DetectContentType https://golang.org/src/net/http/sniff.go?s=646:688#L11进行检测。

func (*UFileRequest) ListObjects

func (u *UFileRequest) ListObjects(prefix, marker, delimiter string, maxkeys int) (list ListObjectsResponse, err error)

ListObjects 获取目录文件列表。 prefix 返回以Prefix作为前缀的目录文件列表 marker 返回以字母排序后,大于Marker的目录文件列表 delimiter 目录分隔符,当前只支持"/"和"",当Delimiter设置为"/"时,返回目录形式的文件列表,当Delimiter设置为""时,返回非目录层级文件列表 maxkeys 指定返回目录文件列表的最大数量,默认值为100

func (*UFileRequest) MPut

func (u *UFileRequest) MPut(filePath, keyName, mimeType string) error

MPut 分片上传一个文件,filePath 是本地文件所在的路径,内部会自动对文件进行分片上传,上传的方式是同步一片一片的上传。 mimeType 如果为空的话,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 大于 100M 的文件推荐使用本接口上传。

func (*UFileRequest) MPutWithPolicy

func (u *UFileRequest) MPutWithPolicy(filePath, keyName, mimeType string, policy_json string) error

MPut 分片上传一个文件,filePath 是本地文件所在的路径,内部会自动对文件进行分片上传,上传的方式是同步一片一片的上传。 mimeType 如果为空的话,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 大于 100M 的文件推荐使用本接口上传。

func (*UFileRequest) PostFile

func (u *UFileRequest) PostFile(filePath, keyName, mimeType string) (err error)

PostFile 使用 HTTP Form 的方式上传一个文件。 注意:使用本接口上传文件后,调用 UploadHit 接口会返回 404,因为经过 form 包装的文件,etag 值会不一样,所以会调用失败。 mimeType 如果为空的话,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 小于 100M 的文件推荐使用本接口上传。

func (*UFileRequest) PrefixFileList

func (u *UFileRequest) PrefixFileList(prefix, marker string, limit int) (list FileListResponse, err error)

PrefixFileList 获取文件列表。 prefix 表示匹配文件前缀。 marker 标志字符串 limit 列表数量限制,传 0 会默认设置为 20.

func (*UFileRequest) PutFile

func (u *UFileRequest) PutFile(filePath, keyName, mimeType string) error

PutFile 把文件直接放到 HTTP Body 里面上传,相对 PostFile 接口,这个要更简单,速度会更快(因为不用包装 form)。 mimeType 如果为空的,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 小于 100M 的文件推荐使用本接口上传。

func (*UFileRequest) PutFileWithIopString

func (u *UFileRequest) PutFileWithIopString(filePath, keyName, mimeType string, iopcmd string) error

PutFileWithIopString 支持上传iop, 直接指定iop字符串, 上传iop必须指定saveAs命令做持久化,否则图片处理不会生效

func (*UFileRequest) PutFileWithPolicy

func (u *UFileRequest) PutFileWithPolicy(filePath, keyName, mimeType string, policy_json string) error

PutFile 把文件直接放到 HTTP Body 里面上传,相对 PostFile 接口,这个要更简单,速度会更快(因为不用包装 form)。 mimeType 如果为空的,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。 小于 100M 的文件推荐使用本接口上传。 支持带上传回调的参数, policy_json 为json 格式字符串

func (*UFileRequest) Restore

func (u *UFileRequest) Restore(keyName string) (err error)

Restore 用于解冻冷存类型的文件

func (*UFileRequest) UpdateBucket

func (u *UFileRequest) UpdateBucket(bucketName, bucketType, projectID string) (bucket BucketResponse, err error)

UpdateBucket 更新一个 bucket,你可以改 bucket 的访问类型(私有或公有)。 bucketType 填公有(public)或私有(private)。 projectID 所操作Bucket在默认子项目下填空(""),非默认项目下必须填写。

func (*UFileRequest) UploadPart

func (u *UFileRequest) UploadPart(buf *bytes.Buffer, state *MultipartState, partNumber int) error

UploadPart 上传一个分片,buf 就是分片数据,buf 的数据块大小必须为 state.BlkSize,否则会报错。 pardNumber 表示第几个分片,从 0 开始。例如一个文件按 state.BlkSize 分为 5 块,那么分片分别是 0,1,2,3,4。 state 参数是 InitiateMultipartUpload 返回的

func (*UFileRequest) UploadPartCopy

func (u *UFileRequest) UploadPartCopy(state *MultipartState, partNumber int, sourceBucketName, sourceObject string, offset, size int64) error

UploadPartCopy 实现从一个已存在的Object中拷贝数据来上传一个Part。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL