ufsdk

package module
v2.1.0-alpha Latest Latest
Warning

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

Go to latest
Published: Oct 22, 2020 License: MIT Imports: 22 Imported by: 0

README

UCloud 对象存储 SDK GoDoc

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

UFile 对象存储基本概念

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

签名

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

安装

go get github.com/ufilesdk-dev/ufile-gosdk/v2

执行测试

cd example; go run demo_file.go

功能列表

文件操作相关功能

Put 上传 Post 上传
分片上传 同步分片上传异步分片上传
手动分片上传,步骤一步骤二步骤三取消分片上传
文件秒传
获取文件列表
获取目录文件列表 获取私有空间下载地址获取公有空间下载地址
删除文件
查看文件信息
下载文件
比对本地与远程文件的 Etag
拷贝文件
重命名文件
Put 带回调上传 同步分片上传-带回调异步分片上传-带回调
文件客户端加密上传, 文件客户端解密下载

Bucket 操作相关功能

创建 bucket
删除 bucket
获取 bucket 列表
修改 bucket

签名构造

构造文件管理签名
构造私有空间下载签名
构造 bucket 管理签名

示例代码

SDK 主要分为两个模块,一个是 bucket 管理,一个是 file 管理。使用对象存储你需要频繁的调用 file 管理相关的接口,bucket 管理用到的地方不会太频繁。以下是用 SDK 上传一个文件的例子:

import ufsdk "github.com/ufilesdk-dev/ufile-gosdk"
config, err := ufsdk.LoadConfig(configFile)
if err != nil {
    panic(err.Error())
}
req := ufsdk.NewFileRequest(config, nil)
err = req.PutFile(filePath, keyName, "")
if err != nil {
    fmt.Println("文件上传失败!!,错误信息为:", err.Error())
    //把 HTTP 详细的 HTTP response dump 出来
    fmt.Printf("%s\n",req.DumpResponse(true))
}

更详细的代码请参考 example/demo_file.goexample/demo_bucket.go

客户端加密

用户需先在配置文件中提供密钥,密钥位数限定16,24或32,分别对应AES-128,AES-192或AES-256算法,配置文件参考example/config.json.example

示例代码
import ufsdk "github.com/ufilesdk-dev/ufile-gosdk"
config, err := ufsdk.LoadConfig(configFile)
if err != nil {
    panic(err.Error())
}

req, err := ufsdk.NewFileRequest(config, nil)
if err != nil {
    panic(err.Error())
}
log.Println("正在加密上传文件。。。。")

err = req.PutWithEncryptFile(uploadFile, remoteFileKey, "")
if err != nil {
    log.Println("文件上传失败,失败原因:", err.Error())
    return
}

更详细的代码请参考 example/demo_csencryption.go

文档说明

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

如何排错?

使用 UFileRequest 里面的方法对返回的 error 进行检查。如果不为 nil,调用 Error() 查看错误信息。调用 DumpResponse(true) 并获取返回值查看详细的 HTTP 返回值。

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"`
	BucketName      string `json:"bucket_name"`
	FileHost        string `json:"file_host"`
	BucketHost      string `json:"bucket_host"`
	VerifyUploadMD5 bool   `json:"verfiy_upload_md5"`
	CryptoKey       string `json:"crypto_key"`
}

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 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

	Crypto        *utils.Crypto
	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) DownloadWithDecryptFile

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

DownloadWithDecryptFile 文件客户端加密下载 注意在客户端加密的条件下,ufile暂不支持文件分片上传下载操作,因此客户端加密后文件下载请使用此接口 进行客户端加密下载时,需要用户提供加解密密钥,详情见配置文件相关文档

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) PutWithEncryptFile

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

PutWithCryptoFile 文件客户端加密上传 进行客户端加密上传时,需要用户提供加解密密钥,详情见配置文件相关文档 本SDK支持加密算法AES-GCM-NoPadding,如有其它加密算法需求,需自行实现加解密方法 注意在客户端加密的条件下,ufile暂不支持文件分片上传下载操作。 mimeType 如果为空的,会调用 net/http 里面的 DetectContentType 进行检测。 keyName 表示传到 ufile 的文件名。

func (*UFileRequest) Rename

func (u *UFileRequest) Rename(keyName, newKeyName, force string) (err error)

Rename 重命名指定文件 keyName 需要被重命名的源文件 newKeyName 修改后的新文件名 force 如果已存在同名文件,值为"true"则覆盖,否则会操作失败

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 的类型(私有或公有)和 项目 ID。 bucketType 填公有(public)或私有(private)。 projectID 没有可以填空("")。

func (*UFileRequest) UploadHit

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

UploadHit 文件秒传,它的原理是计算出文件的 etag 值与远端服务器进行对比,如果文件存在就快速返回。

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 返回的

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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