Python在七牛雲平台的應用(一)


七牛雲:(引用百度的介紹)七牛雲是國內領先的企業級公有雲服務商,致力於打造以數據為核心的場景化PaaS服務。圍繞富媒體場景,七牛先后推出了對象存儲,融合CDN加速,數據通用處理,內容反垃圾服務,以及直播雲服務等。目前,七牛雲已經在為 50多萬家企業提供服務, 親歷互聯網創新創業發展的同時,也深入理解傳統企業轉型過程中的雲服務需求場景,推出了有針對性的一系列行業解決方案。

(一)在這里介紹一下Python怎么通過官方提供的庫對自己空間進行操作

  首先需要注冊一個七牛的賬號,並創建一個Bucket,另外還需要在個人面板中的密匙中得到AK和SK.之后就能通過七牛的SDK對自己的空間進行操作了.

 本文對上傳/下載/刪除 三個操作的方法進行說明:

 1.通過七牛的開發者中心可以得到相關的官方文檔

 2.可以看到python需要安裝七牛提供的庫,先在cmd中執行以下語句:

pip install qiniu

 3.之后請到個人界面得到自己的Accesskey和Secretkey.

 4.根據官方文檔用python寫出適合自己的程序

 

(二)簡單描述下上傳的步驟

1.接口形式 七牛雲選擇 HTTP協議 作為基准接口形式

2.上傳接口

用於單文件直傳,如果不用官方的SDK也可以使用multipart/from-data格式組織上傳數據,可以參考官方文檔

3.上傳請求報文

上傳的請求主要分成三個

 1)上傳授權憑證 Token 用於確認上傳者的身份是否能進行上傳操作

具體也有格式: <AccessKey>:<EncodedSign>:<EncodedPutPolicy>第二個第三個分別是加密簽名和上傳策略,都要經過url-base64加密,上傳策略可以定義各種上傳的參數,具體

的參數請見官方文檔.

 2)文件 用於上傳的文件的內容

 3)文件名

下面就是詳細的介紹

 

(三)三個操作方法

1.上傳,下面代碼:

#上傳
def upload(bucket,path,filename,key):
    token = key.upload_token(bucket, filename, 3600)
    print('正在上傳..')
    reform,inform = put_file(token, filename, path)
    if reform != None:
        print('已經成功地將{}->>{}'.format(filename,bucket))
    else:
        print('這里出現了一個小錯誤.')

其中bucket是上傳的空間,path是上傳文件存放的路徑,filename是文件的名字,key提供了對操作者的身份進行了鑒定 token.

2.下載,見下方代碼:

#下載        
def download(url,path):
    r = requests.get(url)
    contenter=r.content
    with open(path,'wb') as filer:
        filer.write(contenter)
        filer.close()
    print("已經保存文件到{}".format(path))

因為這里的下載使用的是公共空間,並非是私有的,所以可以直接得到文件的url鏈接,這樣子可以直接通過requests庫和操作文件的方法進行保存到本地,下載私有空間的方法請見七牛雲提

供的方法,這里不做介紹.

3.刪除,見下方代碼:

#刪除
def delete(bucketer,filename,key):
    print('正在刪除..')
    bucket = BucketManager(key)
    reform,fo = bucket.delete(bucketer, filename)
    if reform != None:
        print('已經成功地將{}->>X'.format(filename))
    else:
        print('這里出現了一個小錯誤.(可能是空間並沒有這個文件)')

這里需要的是bucketer-空間的名字,為了和bucket這個類區分開;filename和key和上傳的時候使用的一樣.

 

(四)七牛雲提供了很多官方的和非官方的一些API,可以很方便的對存貯在七牛雲空間中的文件進行操作,這樣子可以使我們的一些工作更加方便和簡單.在后面幾周我會對我使用得七牛雲

平台上的一些API時遇到的一些好的和大家進行分享.

 

(五)這里提供一個我寫的上面操作的集合體供各位同學參考,代碼如下:

#七牛雲上傳文件到空間內.
#請得到自己的secret和access key
#PS本來 AK 和SK 用了getpass庫,但是因為不支持,所以暫時屏蔽了.

#import SDK
from qiniu import Auth,put_file,etag,BucketManager
import qiniu.config
from getpass import getpass
import requests

#上傳
def upload(bucket,path,filename,key):
    token = key.upload_token(bucket, filename, 3600)
    print('正在上傳..')
    reform,inform = put_file(token, filename, path)
    if reform != None:
        print('已經成功地將{}->>{}'.format(filename,bucket))
    else:
        print('這里出現了一個小錯誤.')

#下載        
def download(url,path):
    r = requests.get(url)
    contenter=r.content
    with open(path,'wb') as filer:
        filer.write(contenter)
        filer.close()
    print("已經保存文件到{}".format(path))
#刪除
def delete(bucketer,filename,key):
    print('正在刪除..')
    bucket = BucketManager(key)
    reform,fo = bucket.delete(bucketer, filename)
    if reform != None:
        print('已經成功地將{}->>X'.format(filename))
    else:
        print('這里出現了一個小錯誤.(可能是空間並沒有這個文件)')

#主體        
def main():
    #填寫你的 AK 和 SK
    accesskey = input('請輸入您在七牛雲的AccessKey:')
    secretkey = input('請輸入您在七牛雲的SecretKey:')

    #鑒定身份
    keyq=Auth(accesskey,secretkey)

    #所要操作的空間
    bucketname =input("請輸入要操作的空間(公開)名字:")

    #判定操作類型
    while 1:
        order=input('請輸入你需要進行的操作:')
        mode=order.split(' ')[0]
        if mode == '上傳':
            path=order.split(' ')[1]
            fname=path.split('/')[-1:][0]
            print('正在嘗試生成Token.請稍后..')
            upload(bucketname,path,fname,keyq)
        elif mode == '下載':
            print('正在嘗試生成Token.請稍后..')
            download(order.split(' ')[1],order.split(' ')[2])
        elif mode == '更換':
            if order.split(' ')[1] == '空間':
                bucketname =input("請輸入您想要更改的空間(公開)名字:")
            elif order.split(' ')[1] == 'AK':
                #accesskey = getpass(prompt= '請輸入新的AK:')
                accesskey = input( '請輸入新的AK:')
            elif order.split(' ')[1] == 'SK':
                #secretkey = getpass('請輸入新的SK:')
                secretkey = input('請輸入新的SK:')
            else:
                print('您輸入的命令有誤')
        elif mode == '刪除':
            print('正在嘗試生成Token.請稍后..')
            delete(bucketname,order.split(' ')[1],keyq)
            
        elif mode =='退出':
            break
        else:
            print('輸入的命令存在錯誤')

print('+---------------------------------------------------+')
print('|歡迎使用本Qiniu雲的上傳下載程序,以下為使用方法    |')
print('|---------------------------------------------------|')
print('|1.清先輸入您的Accesskey和SecretKey進行鑒權         |')
print('|2.之后請輸入您要進行操作的buket空間                |')
print('|3.上傳操作的命令為: 上傳 文件地址(帶后綴)          |')
print('|4.下載操作的命令為: 下載 鏈接地址 本地路徑帶后綴)  |')
print('|5.刪除操作的命令為: 刪除 空間中的文件名稱          |')
print('|6.更換bucket操作為: 更換 空間名                    |')
print('|7.更換AKSK的操作為: 更換 AK/SK                     |')
print('|8.退出程序的操作為: 退出                           |')
print('+---------------------------------------------------+')
main()
    

 具體的使用效果如下:

七牛雲平台操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM