第三方存储--七牛云

七牛云介绍

  • 项目初期, 数据量小的情况下, 一般会采用第三方的存储方案, 成本比较低, 而且也安全可靠
  • 当数据量达到一定的规模, 第三方存储的费用超过自己搭建文件服务, 才会选择搭建自己文件服务系统
  • 对象存储服务 OSS
  • 使用细节
    • 要求实名认证
    • 创建存储空间
    • 默认生成测试域名 有效期为一个月 要长期使用则需要绑定自己的域名

交互过程

第三方存储--七牛云

API封装

-安装pip install qiniu

from qiniu import Auth, put_data


def upload_file(file_data):
    """
    七牛云上传

    :param file_data 上传的二进制数据
    :return: 文件名
    """
    #需要填写你的 Access Key 和 Secret Key
    access_key = 'kJ8wVO7lmFGsdvtI5M7eQDEJ1eT3Vrygb4SmR00E'
    secret_key = 'rGwHyAvnlLK7rU4htRpNYzpuz0OHJKzX2O1LWTNl'
    #构建鉴权对象
    q = Auth(access_key, secret_key)

    # 要上传的空间
    bucket_name = 'info28'
    # 上传后保存的文件名  如果为None 自动生成文件名(hash值)
    key = None
    #生成上传 Token,可以指定过期时间等
    token = q.upload_token(bucket_name, key, 3600)

    ret, info = put_data(token, key, file_data)
    # 判断请求结果
    if info.status_code == 200:
        return ret.get('key')
    else:
        raise Exception(info.error)


if __name__ == '__main__':
    with open('123.jpg', 'rb') as f:
        img_bytes = f.read()
        file_name = upload_file(img_bytes)
        print(file_name)

  • 判断文件类型是否为图片
import imghdr

if __name__ == '__main__':

    with open('123.jpg', 'rb') as f:
        # 判断文件类型的本质是 对比文件的前几个字节
        content = f.read()
        # print(content)

        # # 方式1 判断图片类型
        # img_type = imghdr.what(f)
        # if img_type:
        #     print('是图片类型: %s' % img_type)
        # else:
        #     print('不是图片类型')

        # 方式2 判断图片类型
        img_type = imghdr.what(None, content)
        if img_type:
            print('是图片类型: %s' % img_type)
        else:
            print('不是图片类型')

接口实现‘’

# 上传头像
/v1_0/user/photo
# 请求方式  
PATCH   form-data
# 请求参数  
photo   上传的头像文件

# 响应数据  json
{
  "photo_url": "www.xx.com/123.jpg"
}

过期时间调长一些

  • 虚拟机的时间和真实时间存在较大的偏差

第三方存储--七牛云