七牛雲:(引用百度的介紹)七牛雲是國內領先的企業級公有云服務商,致力於打造以數據爲核心的場景化PaaS服務。圍繞富媒體場景,七牛前後推出了對象存儲,融合CDN加速,數據通用處理,內容反垃圾服務,以及直播雲服務等。目前,七牛雲已經在爲 50多萬家企業提供服務, 親歷互聯網創新創業發展的同時,也深刻理解傳統企業轉型過程當中的雲服務需求場景,推出了有針對性的一系列行業解決方案。python
(一)在這裏介紹一下Python怎麼經過官方提供的庫對本身空間進行操做加密
首先須要註冊一個七牛的帳號,並建立一個Bucket,另外還須要在我的面板中的密匙中獲得AK和SK.以後就能經過七牛的SDK對本身的空間進行操做了.url
本文對上傳/下載/刪除 三個操做的方法進行說明:spa
1.經過七牛的開發者中心能夠獲得相關的官方文檔code
2.能夠看到python須要安裝七牛提供的庫,先在cmd中執行如下語句:orm
pip install qiniu
3.以後請到我的界面獲得本身的Accesskey和Secretkey.對象
4.根據官方文檔用python寫出適合本身的程序blog
(二)簡單描述下上傳的步驟token
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()
具體的使用效果以下: