通过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 相关文章推荐
pymongo实现多结果进行多列排序的方法
May 16 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
PageFactory设计模式基于python实现
Apr 14 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
PHP 快速排序算法详解
2014/11/10 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
HTML的form表单和django的form表单
2019/07/25 Python
Django框架视图函数设计示例
2019/07/29 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
大学生先进事迹材料
2014/02/16 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
尼克胡哲观后感
2015/06/08 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
Java8中Stream的一些神操作
2021/11/02 Java/Android
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python