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
- func MakeBaseUrl(domain, key string) (baseUrl string)
- func SetAppName(userApp string) error
- func SetMac(accessKey, secretKey string)
- func URIChangeMime(bucket, key, mime string) string
- func URIChangeType(bucket, key string, Type FileType) string
- func URICopy(bucketSrc, keySrc, bucketDest, keyDest string) string
- func URIDelete(bucket, key string) string
- func URIMove(bucketSrc, keySrc, bucketDest, keyDest string) string
- func URIStat(bucket, key string) string
- type BatchItemRet
- type BatchStatItemRet
- type Bucket
- func (p Bucket) BatchCopy(ctx Context, entries ...KeyPair) (ret []BatchItemRet, err error)
- func (p Bucket) BatchDelete(ctx Context, keys ...string) (ret []BatchItemRet, err error)
- func (p Bucket) BatchMove(ctx Context, entries ...KeyPair) (ret []BatchItemRet, err error)
- func (p Bucket) BatchStat(ctx Context, keys ...string) (ret []BatchStatItemRet, err error)
- func (p Bucket) ChangeMime(ctx Context, key, mime string) (err error)
- func (p Bucket) Copy(ctx Context, keySrc, keyDest string) (err error)
- func (p Bucket) Delete(ctx Context, key string) (err error)
- func (p Bucket) Fetch(ctx Context, key string, url string) (err error)
- func (p Bucket) List(ctx Context, prefix, marker string, limit int) (entries []ListItem, markerOut string, err error)
- func (p Bucket) ListWithParts(ctx Context, prefix, marker string, limit int) (entries []ListItem, markerOut string, err error)
- func (p Bucket) Move(ctx Context, keySrc, keyDest string) (err error)
- func (p Bucket) MoveEx(ctx Context, keySrc, bucketDest, keyDest string) (err error)
- func (p Bucket) Put(ctx Context, ret interface{}, key string, data io.Reader, size int64, ...) error
- func (p Bucket) PutFile(ctx Context, ret interface{}, key, localFile string, extra *PutExtra) (err error)
- func (p Bucket) PutFileWithoutKey(ctx Context, ret interface{}, localFile string, extra *PutExtra) (err error)
- func (p Bucket) PutWithoutKey(ctx Context, ret interface{}, data io.Reader, size int64, extra *PutExtra) error
- func (p Bucket) Rput(ctx Context, ret interface{}, key string, data io.ReaderAt, size int64, ...) error
- func (p Bucket) RputFile(ctx Context, ret interface{}, key, localFile string, extra *RputExtra) (err error)
- func (p Bucket) RputFileWithoutKey(ctx Context, ret interface{}, localFile string, extra *RputExtra) (err error)
- func (p Bucket) RputWithoutKey(ctx Context, ret interface{}, data io.ReaderAt, size int64, extra *RputExtra) error
- func (p Bucket) Stat(ctx Context, key string) (entry Entry, err error)
- type Client
- type Config
- type Entry
- type FileType
- type GetPolicy
- type KeyPair
- type ListItem
- type PutExtra
- type PutPolicy
- type RputExtra
Constants ¶
const ( TypeNormal = iota TypeLine TypeArchive FileTypeMax )
Variables ¶
This section is empty.
Functions ¶
func MakeBaseUrl ¶
根据空间(Bucket)的域名,以及文件的 key,获得 baseUrl。 如果空间是 public 的,那么通过 baseUrl 可以直接下载文件内容。 如果空间是 private 的,那么需要对 baseUrl 进行私有签名得到一个临时有效的 privateUrl 进行下载。
func SetAppName ¶
SetAppName 设置使用这个SDK的应用程序名。userApp 必须满足 [A-Za-z0-9_\ \-\.]*
func URIChangeMime ¶
func URIChangeType ¶
Types ¶
type BatchItemRet ¶
type BatchStatItemRet ¶
type Bucket ¶
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) Fetch ¶
从网上抓取一个资源并存储到七牛空间(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) MoveEx ¶
跨空间(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 结构的描述。
type Client ¶
type Client struct { rpc.Client Config // contains filtered or unexported fields }
func (*Client) MakePrivateUrl ¶
func (*Client) MakeUptoken ¶
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 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条件,只有条件匹配才会执行覆盖操作 }