通过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实现文件大小输出
Jan 11 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Python中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
Python解析Excle文件中的数据方法
Oct 23 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
python修改txt文件中的某一项方法
Dec 29 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 Python
django下创建多个app并设置urls方法
Aug 02 Python
python删除文件、清空目录的实现方法
Sep 23 Python
Python requests库参数提交的注意事项总结
Mar 29 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
百度实时推送api接口应用示例
2014/10/21 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
详解vue v-model
2020/08/31 Javascript
跟老齐学Python之dict()的操作方法
2014/09/24 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
工程监理应届生求职信
2013/11/09 职场文书
买房子个人收入证明
2014/01/16 职场文书
市场营销求职信范文
2014/02/21 职场文书
摄影展策划方案
2014/06/02 职场文书
2014年教学工作总结
2014/11/13 职场文书
2015年教研工作总结
2015/05/23 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题