這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
官網看api,如何使用,對於第一次使用go語言的我略顯吃力,嘿嘿,看了個demo就會了,而且超簡單
package main
import (
"fmt"
. "github.com/qiniu/api/conf"
"github.com/qiniu/api/fop"//這個地方是坑,網上的api。如果下載下來,請改本地地址,這裡是網路地址,而且官網沒提示要引用下面幾個
"github.com/qiniu/api/io"
"github.com/qiniu/api/rs"
"log"
)
func init() {
ACCESS_KEY = "自己建立帳號密鑰產生的"
SECRET_KEY = "自己建立帳號密鑰產生的"
}
//GET upload access token
func uptoken(bucketName string) string {
putPolicy := rs.PutPolicy{
Scope: bucketName,
//CallbackUrl: callbackUrl,
//CallbackBody:callbackBody,
//ReturnUrl: returnUrl,
//ReturnBody: returnBody,
//AsyncOps: asyncOps,
//EndUser: endUser,
//Expires: expires,
}
return putPolicy.Token(nil)
}
func main() {
//上傳本地檔案
upload()
//5.1 擷取檔案資訊
//getFileInfo()
//6.1.1 查看映像屬性
//imageAttr()
//5.2 刪除檔案
//delFile()
//delFile2()
//imageAttr2()
//copyFile("needkane", "need", "needcrystal", "needtoo")
//fmt.Println(downloadUrl("needcrystal.qiniudn.com", "needtoo"))
//getBatchInfo()
//highBatch()
//println(makeViewUrl("http://needkane.qiniudn.com/need"))
var rc = rsf.New(nil)//這裡注意我這傳入類型rsf.Client,而sdk寫的是引用*rsf.Client;若採用sdk的形式,則調用傳參數時應該是listAll(nil,&rc,"needkane","nee")
listAll(nil, rc, "needkane", "nee")
}
//6.1.1 查看圖像屬性,可以沒有AK和SK
func imageAttr() {
var imageUrl = "http://needkane.qiniudn.com/kane2.jpg"
ii := fop.ImageInfo{}
infoRet, err := ii.Call(nil, imageUrl)
if err != nil {
// 產生錯誤
log.Println("fop getImageInfo failed:", err)
return
}
log.Println(infoRet.Height, infoRet.Width, infoRet.ColorModel, infoRet.Format)
}
func makeImageInfoUrl(imageUrl string) string {
ii := fop.ImageInfo{}
return ii.MakeRequest(imageUrl)
}
//5.2 刪除檔案
func delFile() {
bucket := "自己建立的空間名稱"
key := "goupload.jpg"
var rsCli = rs.New(nil)
err := rsCli.Delete(nil, bucket, key)
if err != nil {
// 產生錯誤
log.Println("rs.Copy failed:", err)
return
}
}
//5.1 擷取檔案資訊
func getFileInfo() {
var ret rs.Entry
bucket := "attach"
key := "goupload.jpg"
var rsCli = rs.New(nil)
ret, err := rsCli.Stat(nil, bucket, key)//如果這裡不用:= ,改為=,則必須前面通過var聲明變數ret,err
if err != nil {
// 產生錯誤
log.Println("rs.Stat failed:", err)
return
}
// 處理傳回值
log.Println(ret)
}
//上傳本地檔案
func upload() {
uptoken := uptoken("自己建立的空間名稱")
fmt.Printf("uptoken:%s\n", uptoken)
var err error
var ret io.PutRet
var extra = &io.PutExtra{
//Params: params,
//MimeType: mieType,
//Crc32: crc32,
//CheckCrc: CheckCrc,
}
var key = "kane2.jpg"
var localFile = "/root/Desktop/kane.jpg"
// ret 變數用於存取返回的資訊,詳情見 io.PutRet
// uptoken 為商務服務器產生的上傳口令
// key 為檔案儲存體的標識
// localFile 為本地檔案名稱
// extra 為上傳檔案的額外資訊,詳情見 io.PutExtra,可選
err = io.PutFile(nil, &ret, uptoken, key, localFile, extra)
if err != nil {
//上傳產生錯誤
log.Print("io.PutFile failed:", err)
return
}
//上傳成功,處理傳回值
log.Print(ret.Hash, ret.Key)
}
//批量查詢操作
func getBatchInfo() {
entryPathes := []rs.EntryPath{
rs.EntryPath{
Bucket: "needkane",
Key: "kane3.jpg",
},
rs.EntryPath{
Bucket: "needcrystal",
Key: "needtoo",
},
}
var batchStatRests []rs.BatchStatItemRet
var rsCli = rs.New(nil)
batchStatRests, err := rsCli.BatchStat(nil, entryPathes)
if err != nil {
log.Println("rs.BatchStat failed", err)
return
}
for time, item := range batchStatRests {
log.Println(time, ";;;;", item)
}
}
//聯合多種批處理
func highBatch() {
ops := []string{
rs.URIStat("needkane", "need"),
rs.URICopy("needkane", "kane3.jpg", "needcrystal", "kane"),
rs.URIDelete("needkane", "kane3.jpg"),
}
rets := new([]rs.BatchItemRet)
var rsCli = rs.New(nil)
err := rsCli.Batch(nil, rets, ops)
if err != nil {
log.Println("rs.Batch failed:", err)
return
}
for time, ret := range *rets {
log.Println(time, "::", ret.Code, ret.Error)
}
}
//預覽功能
func makeViewUrl(imageUrl string) string {
/* var view = fop.ImageView{
//Mode int // 縮減模式
Width: 1000, // Width = 0 表示不限定寬度
Height: 1200, // Height = 0 表示不限定高度
Quality: 100, // 品質, 1-100
Format: "gif", // 輸出格式,如jpg, gif, png, tif等等
}*/
var view = fop.ImageView{}
view.Height = 100
view.Width = 500
view.Quality = 100
return view.MakeRequest(imageUrl)
}
//
批量擷取檔案清單
func listAll(l rpc.Logger, rc rsf.Client, bucketName string, prefix string) {
var entries []rsf.ListItem
var marker = ""
var err error
var limit = 1000
for err == nil {
entries, marker, err = rc.ListPrefix(nil, bucketName, prefix, marker, limit)
for _, item := range entries {
log.Print("item:", item)
}
}
if err != io.EOF {
//非預期的錯誤
log.Print("listAll failed:", err)
}
}
有個響應遲鈍的bug,這裡調用了api,但是圖形介面上沒有顯示調用的次數
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。