kodo

package
v1.0.6 Latest Latest
Warning

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

Go to latest
Published: Jun 25, 2021 License: MIT Imports: 16 Imported by: 0

Documentation

Overview

包 qiniupkg.com/api.v7/kodo 提供了在您的业务服务器(服务端)调用七牛云存储服务的能力

首先,我们要配置下 AccessKey/SecretKey,这可以在七牛 Portal 中查到:

kodo.SetMac("your-access-key", "your-secret-key")

然后我们创建一个 Client 对象:

zone := 0 // 您空间(Bucket)所在的区域
c := kodo.New(zone, nil) // 用默认配置创建 Client

有了 Client,你就可以操作您的空间(Bucket)了,比如我们要上传一个文件:

import "golang.org/x/net/context"

bucket := c.Bucket("your-bucket-name")
ctx := context.Background()
...
localFile := "/your/local/image/file.jpg"
err := bucket.PutFile(ctx, nil, "foo/bar.jpg", localFile, nil)
if err != nil {
	... // 上传文件失败处理
	return
}
// 上传文件成功
// 这时登录七牛Portal,在 your-bucket-name 空间就可以看到一个 foo/bar.jpg 的文件了

当然,除了上传文件,各种空间(Bucket)相关的操作都可以有,最常见自然是增删改查了:

entry, err := bucket.Stat(ctx, "foo/bar.jpg") // 看看空间中是否存在某个文件,其属性是什么
bucket.Delete(ctx, "foo/bar.jpg") // 删除空间中的某个文件
bucket.ChangeMime(ctx, "foo/bar.jpg", "image/jpeg") // 修改某个文件的 MIME 属性
bucket.Move(ctx, "foo/bar.jpg", "new-name.jpg") // 移动文件
bucket.Copy(ctx, "foo/bar.jpg", "new-copy-file.jpg") // 复制文件

等等... 请问怎么下载文件?如果是公开文件,我们只需要:

import "net/http"

domain := "domain-of-your-bucket.com" // 您的空间绑定的域名,这个可以在七牛的Portal中查到
baseUrl := kodo.MakeBaseUrl(domain, "foo/bar.jpg") // 得到下载 url
resp, err := http.Get(baseUrl)
...

但是对于私有空间,事情要复杂一些,访问上面的 baseUrl 会被拒绝。我们需要多做一步:

privateUrl := c.MakePrivateUrl(baseUrl, nil) // 用默认的下载策略去生成私有下载的 url
resp, err := http.Get(privateUrl)
...

Index

Constants

View Source
const (
	TypeNormal = iota
	TypeLine
	TypeArchive
	FileTypeMax
)

Variables

This section is empty.

Functions

func MakeBaseUrl

func MakeBaseUrl(domain, key string) (baseUrl string)

根据空间(Bucket)的域名,以及文件的 key,获得 baseUrl。 如果空间是 public 的,那么通过 baseUrl 可以直接下载文件内容。 如果空间是 private 的,那么需要对 baseUrl 进行私有签名得到一个临时有效的 privateUrl 进行下载。

func SetAppName

func SetAppName(userApp string) error

设置使用这个SDK的应用程序名。userApp 必须满足 [A-Za-z0-9_\ \-\.]*

func SetMac

func SetMac(accessKey, secretKey string)

设置全局默认的 ACCESS_KEY, SECRET_KEY 变量。

func URIChangeMime

func URIChangeMime(bucket, key, mime string) string

func URIChangeType

func URIChangeType(bucket, key string, Type FileType) string

func URICopy

func URICopy(bucketSrc, keySrc, bucketDest, keyDest string) string

func URIDelete

func URIDelete(bucket, key string) string

func URIMove

func URIMove(bucketSrc, keySrc, bucketDest, keyDest string) string

func URIStat

func URIStat(bucket, key string) string

Types

type BatchItemRet

type BatchItemRet struct {
	Error string `json:"error"`
	Code  int    `json:"code"`
}

type BatchStatItemRet

type BatchStatItemRet struct {
	Data  Entry  `json:"data"`
	Error string `json:"error"`
	Code  int    `json:"code"`
}

type Bucket

type Bucket struct {
	Conn *Client
	Name string
}

func (Bucket) BatchCopy

func (p Bucket) BatchCopy(ctx Context, entries ...KeyPair) (ret []BatchItemRet, err error)

func (Bucket) BatchDelete

func (p Bucket) BatchDelete(ctx Context, keys ...string) (ret []BatchItemRet, err error)

func (Bucket) BatchMove

func (p Bucket) BatchMove(ctx Context, entries ...KeyPair) (ret []BatchItemRet, err error)

func (Bucket) BatchStat

func (p Bucket) BatchStat(ctx Context, keys ...string) (ret []BatchStatItemRet, err error)

func (Bucket) ChangeMime

func (p Bucket) ChangeMime(ctx Context, key, mime string) (err error)

修改文件的MIME类型。

ctx 是请求的上下文。 key 是要修改的文件的访问路径。 mime 是要设置的新MIME类型。

func (Bucket) Copy

func (p Bucket) Copy(ctx Context, keySrc, keyDest string) (err error)

复制一个文件。

ctx 是请求的上下文。 keySrc 是要复制的文件的源路径。 keyDest 是要复制的文件的目标路径。

func (Bucket) Delete

func (p Bucket) Delete(ctx Context, key string) (err error)

删除一个文件。

ctx 是请求的上下文。 key 是要删除的文件的访问路径。

func (Bucket) Fetch

func (p Bucket) Fetch(ctx Context, key string, url string) (err error)

从网上抓取一个资源并存储到七牛空间(bucket)中。

ctx 是请求的上下文。 key 是要存储的文件的访问路径。如果文件已经存在则覆盖。 url 是要抓取的资源的URL。

func (Bucket) List

func (p Bucket) List(
	ctx Context, prefix, marker string, limit int) (entries []ListItem, markerOut string, err error)

首次请求,请将 marker 设置为 ""。 无论 err 值如何,均应该先看 entries 是否有内容。 如果后续没有更多数据,err 返回 EOF,markerOut 返回 ""(但不通过该特征来判断是否结束)。

func (Bucket) ListWithParts

func (p Bucket) ListWithParts(
	ctx Context, prefix, marker string, limit int) (entries []ListItem, markerOut string, err error)

首次请求,请将 marker 设置为 ""。 无论 err 值如何,均应该先看 entries 是否有内容。 如果后续没有更多数据,err 返回 EOF,markerOut 返回 ""(但不通过该特征来判断是否结束)。

func (Bucket) Move

func (p Bucket) Move(ctx Context, keySrc, keyDest string) (err error)

移动一个文件。

ctx 是请求的上下文。 keySrc 是要移动的文件的旧路径。 keyDest 是要移动的文件的新路径。

func (Bucket) MoveEx

func (p Bucket) MoveEx(ctx Context, keySrc, bucketDest, keyDest string) (err error)

跨空间(bucket)移动一个文件。

ctx 是请求的上下文。 keySrc 是要移动的文件的旧路径。 bucketDest 是文件的目标空间。 keyDest 是要移动的文件的新路径。

func (Bucket) Put

func (p Bucket) Put(
	ctx Context, ret interface{}, key string, data io.Reader, size int64, extra *PutExtra) error

上传一个文件。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。返回的是 PutRet 结构。可选,可以传 nil 表示不感兴趣。 key 是要上传的文件访问路径。比如:"foo/bar.jpg"。注意我们建议 key 不要以 '/' 开头。另外,key 为空字符串是合法的。 data 是文件内容的访问接口(io.Reader)。 fsize 是要上传的文件大小。 extra 是上传的一些可选项。详细见 PutExtra 结构的描述。

func (Bucket) PutFile

func (p Bucket) PutFile(
	ctx Context, ret interface{}, key, localFile string, extra *PutExtra) (err error)

上传一个文件。 和 Put 不同的只是一个通过提供文件路径来访问文件内容,一个通过 io.Reader 来访问。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。返回的是 PutRet 结构。可选,可以传 nil 表示不感兴趣。 localFile 是要上传的文件的本地路径。 extra 是上传的一些可选项。详细见 PutExtra 结构的描述。

func (Bucket) PutFileWithoutKey

func (p Bucket) PutFileWithoutKey(
	ctx Context, ret interface{}, localFile string, extra *PutExtra) (err error)

上传一个文件。自动以文件的 hash 作为文件的访问路径(key)。 和 PutWithoutKey 不同的只是一个通过提供文件路径来访问文件内容,一个通过 io.Reader 来访问。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。返回的是 PutRet 结构。可选,可以传 nil 表示不感兴趣。 localFile 是要上传的文件的本地路径。 extra 是上传的一些可选项。详细见 PutExtra 结构的描述。

func (Bucket) PutWithoutKey

func (p Bucket) PutWithoutKey(
	ctx Context, ret interface{}, data io.Reader, size int64, extra *PutExtra) error

上传一个文件。自动以文件的 hash 作为文件的访问路径(key)。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。返回的是 PutRet 结构。可选,可以传 nil 表示不感兴趣。 data 是文件内容的访问接口(io.Reader)。 fsize 是要上传的文件大小。 extra 是上传的一些可选项。详细见 PutExtra 结构的描述。

func (Bucket) Rput

func (p Bucket) Rput(
	ctx Context, ret interface{}, key string, data io.ReaderAt, size int64, extra *RputExtra) error

上传一个文件,支持断点续传和分块上传。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。如果 uptoken 中没有设置 CallbackUrl 或 ReturnBody,那么返回的数据结构是 PutRet 结构。 key 是要上传的文件访问路径。比如:"foo/bar.jpg"。注意我们建议 key 不要以 '/' 开头。另外,key 为空字符串是合法的。 data 是文件内容的访问接口。考虑到需要支持分块上传和断点续传,要的是 io.ReaderAt 接口,而不是 io.Reader。 fsize 是要上传的文件大小。 extra 是上传的一些可选项。详细见 RputExtra 结构的描述。

func (Bucket) RputFile

func (p Bucket) RputFile(
	ctx Context, ret interface{}, key, localFile string, extra *RputExtra) (err error)

上传一个文件,支持断点续传和分块上传。 和 Rput 不同的只是一个通过提供文件路径来访问文件内容,一个通过 io.ReaderAt 来访问。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。如果 uptoken 中没有设置 CallbackUrl 或 ReturnBody,那么返回的数据结构是 PutRet 结构。 key 是要上传的文件访问路径。比如:"foo/bar.jpg"。注意我们建议 key 不要以 '/' 开头。另外,key 为空字符串是合法的。 localFile 是要上传的文件的本地路径。 extra 是上传的一些可选项。详细见 RputExtra 结构的描述。

func (Bucket) RputFileWithoutKey

func (p Bucket) RputFileWithoutKey(
	ctx Context, ret interface{}, localFile string, extra *RputExtra) (err error)

上传一个文件,支持断点续传和分块上传。自动以文件的 hash 作为文件的访问路径(key)。 和 RputWithoutKey 不同的只是一个通过提供文件路径来访问文件内容,一个通过 io.ReaderAt 来访问。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。如果 uptoken 中没有设置 CallbackUrl 或 ReturnBody,那么返回的数据结构是 PutRet 结构。 localFile 是要上传的文件的本地路径。 extra 是上传的一些可选项。详细见 RputExtra 结构的描述。

func (Bucket) RputWithoutKey

func (p Bucket) RputWithoutKey(
	ctx Context, ret interface{}, data io.ReaderAt, size int64, extra *RputExtra) error

上传一个文件,支持断点续传和分块上传。自动以文件的 hash 作为文件的访问路径(key)。

ctx 是请求的上下文。 ret 是上传成功后返回的数据。如果 uptoken 中没有设置 CallbackUrl 或 ReturnBody,那么返回的数据结构是 PutRet 结构。 data 是文件内容的访问接口。考虑到需要支持分块上传和断点续传,要的是 io.ReaderAt 接口,而不是 io.Reader。 fsize 是要上传的文件大小。 extra 是上传的一些可选项。详细见 RputExtra 结构的描述。

func (Bucket) Stat

func (p Bucket) Stat(ctx Context, key string) (entry Entry, err error)

取文件属性。

ctx 是请求的上下文。 key 是要访问的文件的访问路径。

type Client

type Client struct {
	rpc.Client

	Config
	// contains filtered or unexported fields
}

func New

func New(zone int, cfg *Config) (p *Client)

func (*Client) Batch

func (p *Client) Batch(ctx Context, ret interface{}, op []string) (err error)

批量操作。

func (*Client) Bucket

func (p *Client) Bucket(name string) Bucket

取七牛空间(bucket)的对象实例。

name 是创建该七牛空间(bucket)时采用的名称。

func (*Client) MakePrivateUrl

func (p *Client) MakePrivateUrl(baseUrl string, policy *GetPolicy) (privateUrl string)

func (*Client) MakeUptoken

func (p *Client) MakeUptoken(policy *PutPolicy) string

type Config

type Config struct {
	AccessKey string
	SecretKey string
	RSHost    string
	RSFHost   string
	IoHost    string
	UpHosts   []string
	Transport http.RoundTripper
}

type Entry

type Entry struct {
	Hash     string `json:"hash"`
	Fsize    int64  `json:"fsize"`
	PutTime  int64  `json:"putTime"`
	MimeType string `json:"mimeType"`
	EndUser  string `json:"endUser"`
}

type FileType

type FileType uint32

type GetPolicy

type GetPolicy struct {
	Expires uint32
}

type KeyPair

type KeyPair struct {
	Src  string
	Dest string
}

type ListItem

type ListItem struct {
	Key      string            `json:"key"`
	Hash     string            `json:"hash"`
	Fsize    int64             `json:"fsize"`
	PutTime  int64             `json:"putTime"`
	MimeType string            `json:"mimeType"`
	EndUser  string            `json:"endUser"`
	Type     uint32            `json:"type"`
	Status   int               `json:"status,omitempty"`
	XQnMeta  map[string]string `json:"x-qn-meta,omitempty"`
	Parts    []int64           `json:"parts,omitempty"`
}

type PutExtra

type PutExtra kodocli.PutExtra

type PutPolicy

type PutPolicy struct {
	Scope               string   `json:"scope"`
	Expires             uint32   `json:"deadline"`             // 截止时间(以秒为单位)
	InsertOnly          uint16   `json:"insertOnly,omitempty"` // 若非0, 即使Scope为 Bucket:Key 的形式也是insert only
	DetectMime          uint8    `json:"detectMime,omitempty"` // 若非0, 则服务端根据内容自动确定 MimeType
	CallbackFetchKey    uint8    `json:"callbackFetchKey,omitempty"`
	FsizeLimit          int64    `json:"fsizeLimit,omitempty"`
	MimeLimit           string   `json:"mimeLimit,omitempty"`
	SaveKey             string   `json:"saveKey,omitempty"`
	CallbackUrl         string   `json:"callbackUrl,omitempty"`
	CallbackHost        string   `json:"callbackHost,omitempty"`
	CallbackBody        string   `json:"callbackBody,omitempty"`
	CallbackBodyType    string   `json:"callbackBodyType,omitempty"`
	ReturnUrl           string   `json:"returnUrl,omitempty"`
	ReturnBody          string   `json:"returnBody,omitempty"`
	PersistentOps       string   `json:"persistentOps,omitempty"`
	PersistentNotifyUrl string   `json:"persistentNotifyUrl,omitempty"`
	PersistentPipeline  string   `json:"persistentPipeline,omitempty"`
	EndUser             string   `json:"endUser,omitempty"`
	Checksum            string   `json:"checksum,omitempty"` // 格式:<HashName>:<HexHashValue>,目前支持 MD5/SHA1。
	NotifyQueue         string   `json:"notifyQueue,omitempty"`
	NotifyMessage       string   `json:"notifyMessage,omitempty"`
	NotifyMessageType   string   `json:"notifyMessageType,omitempty"`
	DeleteAfterDays     int      `json:"deleteAfterDays,omitempty"`
	FileType            FileType `json:"fileType,omitempty"`
	//内部参数
	OldFh   string `json:"oldFh,omitempty"`
	PutTime int64  `json:"putTime,omitempty"`
	Cond    string `json:"cond,omitempty"` //格式:condKey1=condVal1&condKey2=condVal2,支持hash、mime、fsize、putTime条件,只有条件匹配才会执行覆盖操作
}

func ParseUptoken

func ParseUptoken(uptoken string) (policy PutPolicy, err error)

type RputExtra

type RputExtra kodocli.RputExtra

Jump to

Keyboard shortcuts

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