详解Python在七牛云平台的应用(一)


Posted in Python onDecember 05, 2017

七牛云七牛云是国内领先的企业级云服务商。专注于以数据为核心的云计算业务,围绕富媒体场景推出了对象存储、融合CDN、容器云、大数据、深度学习平台等产品,并提供一站式视频云解决方案,同时打造简单,可信赖的解决方案平台,帮助企业快速上云,创造更大的商业价值。

以上是官网介绍。

(一)在这里介绍一下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()

具体的使用效果如下:

详解Python在七牛云平台的应用(一)

总结

以上就是本文关于详解Python在七牛云平台的应用(一)的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python、Javascript中的闭包比较
Feb 04 Python
深入解析Python中的集合类型操作符
Aug 19 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
python实现名片管理系统项目
Apr 26 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
基于Python实现对比Exce的工具
Apr 07 Python
Python之matplotlib绘制折线图
Apr 13 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 #Python
python调用Delphi写的Dll代码示例
Dec 05 #Python
Python字典数据对象拆分的简单实现方法
Dec 05 #Python
python reduce 函数使用详解
Dec 05 #Python
有趣的python小程序分享
Dec 05 #Python
详细分析python3的reduce函数
Dec 05 #Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 #Python
You might like
Chrome Web App开发小结
2014/09/04 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
php中的登陆login实例代码
2016/06/20 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
带你了解python装饰器
2017/06/15 Python
np.random.seed() 的使用详解
2020/01/14 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
SQL语言面试题
2013/08/27 面试题
语文高效课堂实施方案
2014/05/03 职场文书
服务承诺书范文
2014/05/19 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
调解协议书范本
2016/03/21 职场文书
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
JavaScript实现队列结构过程
2021/12/06 Javascript