详解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打开文件并获取文件相关属性的方法
Apr 23 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
python fabric实现远程部署
Jan 05 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Python的垃圾回收机制详解
Aug 28 Python
Python openpyxl 插入折线图实例
Apr 17 Python
python ssh 执行shell命令的示例
Sep 29 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
python3美化表格数据输出结果的实现代码
Apr 14 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
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
微信小程序 setData的使用方法详解
2017/04/20 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
Django中Model的使用方法教程
2018/03/07 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
祖国在我心中演讲稿
2014/01/15 职场文书
授权委托书公证
2014/09/14 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis