利用七牛云的Python SDK实现文件上传、下载等操作。

import os
import requests
import qiniu
from qiniu import BucketManager
from qiniu import Auth
from qiniu import utils # 你自己的accessKey
accessKey = 'DjZp39jT_GN7yr0i_vf5Zs3vBnzYjzkxd7kt6tuK'
# 你自己的secretKey
secretKey = 'HouhuF7Essfu-VveQ3GYXTcEddgP1qrwtblWuMNa'
# 你自己的bucket_domain
bucket_domain = '7xjsrw.com3.w1.blg.clouddn.com' class Kpan():
    def __init__(self, base_dir, ak=accessKey, sk=secretKey):
        """初始化Kpan类
            base_dir:工作路径
            ak:accessKey
            sk: secretKey
        """
        self.auth = Auth(ak, sk)
        self.bucket_manager = BucketManager(self.auth)
        self.kpan_bucket = 'kpan'
        self.base_dir = os.path.abspath(base_dir)     def upload_file(self, key):
        filePath = os.path.join(self.base_dir, key)
        # 计算当前文件的hash值,如果服务器上存在相同的副本取消上传
        file_hash = utils.etag(filePath)         if file_hash == self.is_file_exist(key):
            print('服务器已存在相同的副本,上传取消...')
            return         upToken = self.auth.upload_token(self.kpan_bucket, key)
        ret, info = qiniu.put_file(upToken, key, filePath)
        print('%s上传成功...' % key)     def download_file(self, key, toPath=None):
        '''下载单个文件
           key:要下载的文件
           toPath:存储路径,默认为base_dir
        '''
        if not toPath:
            toPath = self.base_dir
        base_url = 'http://%s/%s' % (bucket_domain, key)
        # 设置token过期时间
        private_url = self.auth.private_download_url(base_url, expires=3600)
        r = requests.get(private_url)         path = os.path.join(toPath, key)
        dir, _ = os.path.split(path)
        if not os.path.exists(dir):
            os.makedirs(dir)
        with open(path, 'wb') as f:
            f.write(r.content)
            print('%s 文件保存成功' % key)     def get_all_files(self):
        items = self.list_all_file()
        for item in items:
            self.download_file(item['key'])     def delete_file(self, key):
        if not self.is_file_exist(key):
            print('%s 文件不存在...' % key)
            return         ret, info = self.bucket_manager.delete(self.kpan_bucket, key)
        if not ret:
            print('%s 文件删除成功...' % key)
        else:
            print(ret)     def list_all_file(self):
        ret, eof, info = self.bucket_manager.list(self.kpan_bucket)
        items = ret['items']
        # 返回所有文件列表
        return items     def rename(self, key, tokey):
        if not self.is_file_exist(key) or self.is_file_exist(tokey):
            print('重命名失败,“%s”可能已存在' % tokey)
            return         ret, info = self.bucket_manager.rename(self.kpan_bucket, key, tokey)
        if not ret:
            print('将“%s”重命名为“%s”成功...' % (key, tokey))
        else:
            print('“%s”重命名失败...' % key)     def is_file_exist(self, key):
        # 检查服务器上文件是否存在,如存在返回hash值
        ret, info = self.bucket_manager.stat(self.kpan_bucket, key)
        if not ret:
            return False
        else:
            return ret['hash']     def upload_all_files(self):
        for fpathe, dirs, fs in os.walk(self.base_dir):
            for f in fs:
                _path = os.path.join(fpathe, f)
                key = os.path.relpath(_path, self.base_dir)
                if os.name == 'nt':
                    key = key.replace('\\', '/')
                pan.upload_file(key)
        print('所有文件上次成功...') if __name__ == '__main__':
    # 测试文件上传
    pan = Kpan('D:/Kpan')
    # pan.get_all_files()
    pan.upload_all_files()

七牛云数据存储Demo的更多相关文章

  1. DT添加七牛云对象存储插件功能

    七牛云对象存储  1.注意客户购买的空间的存储区域,区域不同对应的上传域名不同    destoon  七牛云上传文件   用下面源码替换include/ftp.class.php   文件代码 &l ...

  2. 使用FileZilla Pro S3协议访问七牛云对象存储

    偶然发现FileZilla还有Pro版本,主要是比免费版多了一些协议支持,也偶然发现七牛云支持了S3协议接口,这样刚好弥补了其没有FTP的不足,于是找官方文档,折腾一下,使用FileZilla Pro ...

  3. Gin + 七牛云对象存储

    配置七牛云存储 创建存储空间 拿到密钥 安装七牛云对象存储SDK 推荐go.mod安装 // 将下面地址复制到go.mod,然后执行go mod download github.com/qiniu/a ...

  4. django之集成七牛云对象存储

    Python3 + Django2.0 集成 "七牛云" 对象存储 (SDK文档地址:http://developer.qiniu.com/kodo/api/3928/error- ...

  5. 在ThinkPHP框架(5.0.24)下引入Ueditor并实现向七牛云对象存储上传图片同时将图片信息保存到MySQL数据库,同时实现lazyload懒加载

    这是我花了很多天的时间才得以真正实现的一组需求. 文章后面有完整Demo的GitHub链接. 一. 需求描述 1. 应用是基于ThinkPHP5开发的: 2. 服务器环境是LNMP,PHP版本是7.2 ...

  6. 七牛云对象存储kodo使用体验

    在这里,我使用了七牛云的对象存储Kodo,和阿里云的OSS,还有腾讯云的COS是同样的产品 oss相关术语 包依赖关系解决 unrecognized import path "golang. ...

  7. 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用v ...

  8. scrapy抓取拉勾网职位信息(七)——数据存储(MongoDB,Mysql,本地CSV)

    上一篇完成了随机UA和随机代理的设置,让爬虫能更稳定的运行,本篇将爬取好的数据进行存储,包括本地文件,关系型数据库(以Mysql为例),非关系型数据库(以MongoDB为例). 实际上我们在编写爬虫r ...

  9. 联系人数据存储Demo源代码

    源码下载地址:07-联系人数据存储.zip35.8 KB // MJPerson.h // //  MJPerson.h //  07-联系人数据存储 // //  Created by apple ...

随机推荐

  1. 【原创】EntityFramework Core 中使用 CodeFirst 模式时 PowerShell 版本问题及解决

    一.描述: 在使用 Entity Framework Core 时,使用 CodeFirst 模式, 在 VS 中的 PMC(nuget 包管理 控制台) 控制台界面使用如下命令: Install-P ...

  2. nyoj_3:多边形重心问题(计算几何)

    基础的计算几何 多边形的n个顶点按*时针方向给出 由任意n边形可分解为n-2个三角形,各三角形面积面积与重心易得,故有各三角形的面积及重心 用重心公式可求得多边形的面积与重心 题目链接: http:/ ...

  3. Linux基础(三)

    一.正文处理命令及tar命令 1.文件合并 cat a.txt b.txt > c.txt 2.打包 归档命令tar可以把多个文件打包成一个文件 如tar cvf test.tar a.txt ...

  4. JavaScript语法基础(1)

    1.JavaScript是什么? 1)定义: JavaScript「JS」是一种高级的.动态的. 弱类型的.解释型的计算机编程脚本语言. 2)原理: 3)组成: 3大部分: ◆ ECMAScript: ...

  5. 第一章:火狐浏览器 : 环境配置: FireFox 版本38 + jdk 7 + selenium 2.53.6 + selenum-version 2.48.2

    配置一套完整的 selenium + Java + Firefox38  环境: 1. 火狐浏览器的版本 : 38 2. JDK 安装 1.7 版本的 3. 安装 Python 的版本是 2.7 4. ...

  6. nopCommerce 3.9 大波浪系列 之 网页加载Widgets插件原理

    一.插件简介 插件用于扩展nopCommerce的功能.nopCommerce有几种类型的插件如:支付.税率.配送方式.小部件等(接口如下图),更多插件可以访问nopCommerce官网. 我们看下后 ...

  7. win10安装sqlserver2016准备

    win10安装sql server2016需要注意: 一.下载jdk-8u121-windows-x64.exe这个安装,这个检测不通过会影响安装 二.把万维网服务的这个去掉,这个影响数据库实例的创建 ...

  8. css鼠标样式cursor

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord

    消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...

  10. Redis-事务即简单锁应用

    Redis支持简单的事务, Redis允许一组命令在单一步骤中执行, 事务有两个属性 事务是一个单独的隔离操作, 事务中所有的命令都会序列化, 按照顺序执行. Redis事务是原子性的, 即要么都执行 ...