详解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标准库与第三方库详解
Jul 22 Python
以windows service方式运行Python程序的方法
Jun 03 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
python 性能优化方法小结
Mar 31 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
哪些是python中web开发框架
Jun 17 Python
Python如何发送与接收大型数组
Aug 07 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
python matplotlib库的基本使用
Sep 23 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
如何用Python搭建gRPC服务
Jun 30 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
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
小程序实现搜索框
2020/06/19 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
python中while循环语句用法简单实例
2015/05/07 Python
Python 一句话生成字母表的方法
2019/01/02 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
总务岗位职责
2013/11/19 职场文书
在校生自我鉴定
2014/01/23 职场文书
捐书活动总结
2014/05/04 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
小学语文国培研修日志
2015/11/13 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python