通过Python来使用七牛云存储的方法详解


Posted in Python onAugust 07, 2015

本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作。
安装

首先,要使用Python的SDK必须要先安装。七牛的Python SDK是开源的,托管在Github上面,项目地址为https://github.com/qiniu/python-sdk。

安装的方式可以如项目的说明上所说,用pip install qiniu。当然也可以直接clone一份源代码下来直接使用。我一般喜欢直接clone源代码,这样的话,如果要对SDK做一些改动也是十分容易的。

最新版本的Python SDK需要依赖requests库,所以要提前安装好。安装方式当然也可以用pip install requests。
开发环境

Python的开发环境有很多种选择,如果喜欢文本的方式,比如vim,emacs,sublime text等都是很好的选择,如果你喜欢IDE,那么最流行的莫过于PyCharm了。PyCharm的最新版本到这里下载。
Access Key和Secret Key

我们知道七牛云存储的权限校验机制基于一对密钥,分别称为Access Key和Secret Key。其中Access Key是公钥,Secret Key是私钥。这一对密钥可以从七牛的后台获取。

通过Python来使用七牛云存储的方法详解

小试牛刀

好了,做了上面的这些准备工作,我们就去上传一个简单的文件,练练手。

#coding=utf-8
__author__ = 'jemy'
'''
本例演示了一个简单的文件上传。

这个例子里面,sdk根据文件的大小选择是Form方式上传还是分片上传。
'''
import qiniu

accessKey = "<Your Access Key>"
secretKey = "<Your Secret Key>"

#解析结果
def parseRet(retData, respInfo):
  if retData != None:
    print("Upload file success!")
    print("Hash: " + retData["hash"])
    print("Key: " + retData["key"])

    #检查扩展参数
    for k, v in retData.items():
      if k[:2] == "x:":
        print(k + ":" + v)

    #检查其他参数
    for k, v in retData.items():
      if k[:2] == "x:" or k == "hash" or k == "key":
        continue
      else:
        print(k + ":" + str(v))
  else:
    print("Upload file failed!")
    print("Error: " + respInfo.text_body)

#无key上传,http请求中不指定key参数
def upload_without_key(bucket, filePath):
  #生成上传凭证
  auth = qiniu.Auth(accessKey, secretKey)
  upToken = auth.upload_token(bucket, key=None)

  #上传文件
  retData, respInfo = qiniu.put_file(upToken, None, filePath)

  #解析结果
  parseRet(retData, respInfo)


def main():
  bucket = "if-pbl"
  filePath = "/Users/jemy/Documents/jemy.png"
  upload_without_key(bucket, filePath)


if __name__ == "__main__":
  main()

运行结果为:

Upload file success!
Hash: Fp0XR6tM4yZmeiKXw7eZzmeyYsq8
Key: Fp0XR6tM4yZmeiKXw7eZzmeyYsq8

从上面我们可以看到,使用七牛的Python SDK上传文件的最基本的步骤是:

  •     生成上传凭证
  •     上传文件
  •     解析回复结果

小结

综上所述,其实使用七牛的SDK来上传文件还是很简单的,接下来的教程,我们将在这个例子的基础上逐步了解更多关于文件上传的知识。

Python 相关文章推荐
Python交换变量
Sep 06 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Python参数类型以及常见的坑详解
Jul 08 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
解决python3安装pandas出错的问题
May 20 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 #Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 #Python
举例详解Python中yield生成器的用法
Aug 05 #Python
Python中return语句用法实例分析
Aug 04 #Python
python函数形参用法实例分析
Aug 04 #Python
Python简明入门教程
Aug 04 #Python
将Python代码打包为jar软件的简单方法
Aug 04 #Python
You might like
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
jQuery拖动图片删除示例
2013/05/10 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python实现ping指定IP的示例
2018/06/04 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
详解Python中namedtuple的使用
2020/04/27 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
HTML5 解析规则分析
2009/08/14 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
.NET remoting中对象激活的两种方式
2015/06/08 面试题
python re模块和正则表达式
2021/03/24 Python
办理退休介绍信
2014/01/09 职场文书
村官工作鉴定评语
2014/01/27 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
高中生的自我评价
2014/03/04 职场文书
会计专业导师推荐信
2014/03/08 职场文书
白岩松演讲
2014/05/21 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
安全承诺书格式范本
2015/04/28 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js