美文网首页
七牛云基本使用

七牛云基本使用

作者: MoonMonsterss | 来源:发表于2018-09-01 22:44 被阅读4次
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Created on 2018-09-01 19:02
    
    import requests
    from qiniu import Auth, put_file, etag
    import qiniu.config
    
    import config
    
    # 网站上的access_key和secret_key,保密
    q = Auth(config.ACCESS_KEY, config.SECRET_KEY)
    # 在七牛云网站上创建的存储空间名称
    bucket_name = config.BUCKET_NAME
    bucket = qiniu.BucketManager(q)
    
    
    def upload_file():
        """
        上传文件
        """
        # 上传到云空间时的文件名称
        # 该名称不能重复,如果重复了话,后面的不会覆盖前面的,也是直接消失了,但还是会返回200
        # 可以上传文件
        # 之前一直疑惑,为什么上传后没有返回文件的访问链接,看了下七牛云的外链后发现格式组成是
        # url + filename
        # url可以自己绑定域名,如果没有,那么就是默认的"http://ped06svnz.bkt.clouddn.com/"
        # 例如上传的是aa.txt文件,那么访问就是 http://ped06svnz.bkt.clouddn.com/aa.txt方式
        file_name = 'bi.jpg'
        # 本地路径
        localfile = '../../image/bi.jpg'
    
        # 生成上传的token,可以指定过期时间
        token = q.upload_token(bucket_name, file_name, 3600)
        print('token =', token)
        # 上传文件
        ret, info = put_file(token, file_name, localfile)
        print('info =', info)
        print('ret =', ret)
    
    
    def state():
        """
        获取文件信息
        """
        file_name = 'logo.jpg'
        ret, info = bucket.stat(bucket_name, file_name)
        print(ret)
        print(info)
    
    
    def filelist():
        """
        获取文件列表
        """
        # 文件名的前缀,默认为None,即全部
        prefix = None
        # 文件数量限制
        limit = 2
        # 指定目录分隔符
        delimiter = None
        # 列举标识符
        # 没懂这两个什么意思
        marker = None
    
        # info是ResponseInfo对象
        # ret是一个dict,里面的每项数据主要包括:
        # {'key': 'aa.txt', 'hash': 'FkX3SBTMZBMQwzjoflXoVYNRqzTf', 'fsize': 2895,
        # 'mimeType': 'text/plain', 'putTime': 15358025593369914, 'type': 0, 'status': 0}
        ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
    
        class FileItem(object):
            def __init__(self, item):
                # 文件名
                self.key = item['key']
                self.hash = item['hash']
                # 文件大小
                self.fsize = item['fsize']
                self.mimeType = item['mimeType']
                self.putTime = item['putTime']
                self.type = item['type']
                self.status = item['status']
    
            def __str__(self):
                return self.key
    
            __repr__ = __str__
    
        items = ret['items']
        fileitems = []
        for item in items:
            fileitems.append(FileItem(item))
        print(fileitems)
    
    
    def download_file():
        """
        私有空间下载
        """
        filename = 'logo.jpg'
        # 下载的话,也是需要知道文件名
        base_url = '{0}/{1}'.format(config.BUCKET_DOMAIN, filename)
        private_url = q.private_download_url(base_url, 3600)
        # 直接使用base_url也是可行的
        # private_url = base_url
        print('private_url =', private_url)
        r = requests.get(private_url)
        with open(filename, 'wb') as fp:
            fp.write(r.content)
    
    
    def fetch_file():
        """
        从网络抓取资源到云存储中
        """
        # 网络资源的url
        file_url = 'http://img.qikula.com/file/image/pic/2a1514549676n434241896c27.jpg'
        # 截取文件名称
        file_name = file_url.split('/')[-1]
        # 上传
        ret, info = bucket.fetch(file_url, bucket_name, file_name)
        print(ret)
        print(info)
    
    
    def move_file():
        """
        移动文件\重命名文件
        如果传入的两个bucket_name是同一个名字,那么就相当于重命名了
        你可以在云存储上创建多个bucket,然后将文件从一个移动到另一个
        """
        bucket_name2 = config.BUCKET_NAME
        filename = 'logo.jpg'
        filename2 = 'logo2.jpg'
        # 前面两个参数是src
        # 后面是dest
        ret, info = bucket.move(bucket_name, filename, bucket_name2, filename2)
        # copy函数,传参一样,复制一个文件
        print(ret)
        print(info)
    
    
    def delete_file():
        """
        删除文件
        如果文件不存在,则会返回 status_code:612, text_body:{"error":"no such file or directory"}
        """
        filename = 'logo2.jpg'
        ret, info = bucket.delete(bucket_name, filename)
        print(ret)
        print(info)
    
    
    def update_deleted_days():
        """
        更新文件被删除的时间
        """
        filename = 'bi.jpg'
        days = '1'
        # 更新后,在网站上没有看到特殊标识
        ret, info = bucket.delete_after_days(bucket_name, filename, days)
        print(ret)
        print(info)
    
    
    # 批量操作
    def batch():
        """
        七牛提供的批量操作
        """
        # 1.重命名
        # 如果文件不存在,返回612(key)
        # 如果文件已经存在,返回298(value)
        keys = {'logo1.jpg': 'logo.jpg', 'aa.txt': 'bb.txt'}
        ops = qiniu.build_batch_rename(bucket_name, keys)
        ret, info = bucket.batch(ops)  # ret的值为None info是ResponseInfo对象
    
        # 2.批量查询
        keys = ['logo.jpg', 'bb.txt', 'dd.png']
        ops = qiniu.build_batch_stat(bucket_name, keys)
        # 返回的info数据中,包含了下列值
        # {"code":200,"data":{"fsize":2895,"hash":"FkX3SBTMZBMQwzjoflXoVYNRqzTf","md5":"noJ5jsvEamFj2xQ3+YxyFg==",
        # "mimeType":"text/plain","putTime":15358109983825052,"type":0}}
        ret, info = bucket.batch(ops)
    
        # 3.批量移动
        # force的意思是,如果target_bucket中有同名的文件,是否强制覆盖
        # qiniu.build_batch_move(source_bucket,keys,target_bucket,force=True)
    
        # 4.批量删除
        qiniu.build_batch_delete(bucket_name, keys)
    
        # 5.批量复制
        # force的意思是,如果target_bucket中有同名的文件,是否强制覆盖
        # qiniu.build_batch_copy(source_bucket,keys,target_bucket,force=True)
    
        pass
    
    
    if __name__ == '__main__':
        # upload_file()
        # state()
        filelist()
    
        # download_file()
        # fetch_file()
        # move_file()
        # delete_file()
        # update_deleted_days()
        # batch()
        pass
    

    ResponseInfo类的主要数据:

    class ResponseInfo(object):
        """七牛HTTP请求返回信息类
    
        该类主要是用于获取和解析对七牛发起各种请求后的响应包的header和body。
    
        Attributes:
            status_code: 整数变量,响应状态码
            text_body:   字符串变量,响应的body
            req_id:      字符串变量,七牛HTTP扩展字段,参考 http://developer.qiniu.com/docs/v6/api/reference/extended-headers.html
            x_log:       字符串变量,七牛HTTP扩展字段,参考 http://developer.qiniu.com/docs/v6/api/reference/extended-headers.html
            error:       字符串变量,响应的错误内容
        """
    

    参考

    https://developer.qiniu.com/kodo/sdk/1242/python
    https://developer.qiniu.com/dora

    相关文章

      网友评论

          本文标题:七牛云基本使用

          本文链接:https://www.haomeiwen.com/subject/pshpwftx.html