详解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 迭代器和iter()函数详解及实例
Mar 21 Python
Python求出0~100以内的所有素数
Jan 23 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
python之mock模块基本使用方法详解
Jun 27 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
Python中random模块常用方法的使用教程
Oct 04 Python
python爬取微博评论的实例讲解
Jan 15 Python
Python读取文件夹下的所有文件实例代码
Apr 02 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
php中将数组存到文件里的实现代码
2012/01/19 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
php操作mongoDB实例分析
2014/12/29 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
php的扩展写法总结
2019/05/14 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
python中list常用操作实例详解
2015/06/03 Python
python实现两个文件合并功能
2018/04/01 Python
pandas 对group进行聚合的例子
2019/12/27 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
Python3实现飞机大战游戏
2020/04/24 Python
python如何求圆的面积
2020/07/01 Python
Python 如何创建一个线程池
2020/07/28 Python
Python自动登录QQ的实现示例
2020/08/28 Python
10个顶级Python实用库推荐
2021/03/04 Python
党校培训自我鉴定范文
2014/03/20 职场文书
幼儿园毕业寄语
2014/04/03 职场文书