python3七牛云上传图片视频工具类

前言

其实这个工具类去年就写了,可以参考我转换图片格式的文章: https://blog.csdn.net/wgPython/article/details/80740067
现在分享出来是想着做个笔记方便自己,然后本着互联网的分享精神,我自己的代码写的也不是很完美,可能很多地方需要大家的指正。

可以自行查看七牛云官方文档地址:https://developer.qiniu.com/kodo/sdk/1242/python 但是都是以本地图片做演示的,我的demo是以图片字节流操作。

准备工作
# 版本 因为我们要用f-string这种特性
python >= 3.6
# 需要安装七牛云sdk pip install qiniu 或者 pipenv install qiniu  
from qiniu import Auth, put_data, put_file 
# 这四个参数需要从七牛云控制台获取
from settings import ACCESS_KEY, SECRET_KEY, BUCKET_NAME, PREFIX_URL
方式一 最简洁方式
import uuid  # 需要倒入uuid 用来命名

def up_file(content):
  	"""
    七牛云上传媒体文件
    :param content: 图片字节流数据
    :return:
    """
    try:
        q = Auth(ACCESS_KEY, SECRET_KEY)
        # 上传到七牛后保存的文件名uuid4+后缀 拼接url
        file_path = f"{uuid.uuid4()}.jpg"
        token = q.upload_token(BUCKET_NAME, file_path, 3600)  # 3600指的是token的过期时间
        ret, info = put_data(token, file_path, content)
        if ret:
            # 上传成功返回地址
            return PREFIX_URL + file_path
        else:
            print("上传失败")
            return None
    except Exception as e:
        # 上传失败返回None
        print("上传GG", e)
        return None
# 调用演示
if __name__ == '__main__':
    # url = "https://www.baidu.com/img/xinshouye_d63d8cd784cea6223a26e3ce33344353.png"
    baidu_logo = "https://www.baidu.com/img/bd_logo1.png"
    res = requests.get(baidu_logo, stream=True)
    n = up_file(res.content)
    print(n)

这种方式是最简单的,优点是代码最简单,和django或者flask对接起来也很方便,因为操作的是文件字节流,缺点是要自己写请求, 然后图片后缀是写死的.jpg,没有对图片的任何操作

方式二 稍微封装
# 由于下面 requests 加了verify=False 不验证ssl证书 就会有警告,这行目的是去掉警告
requests.urllib3.disable_warnings()

class QiNiuUpData(object):

    def __init__(self, time_out=10, headers=None):
        """
        :param time_out: 超时时间
        :param headers: 请求头
        """
        self.q = Auth(ACCESS_KEY, SECRET_KEY)
        self.time_out = time_out
        self.headers = headers

    def up_file(self, img_url, suffix_type="jpg"):
        if not img_url:
            return
        try:
            # 上传到七牛后保存的文件名uuid4+后缀 拼接url
            file_path = f"{uuid.uuid4()}.{suffix_type}"
            token = self.q.upload_token(BUCKET_NAME, file_path, 3600)  # 3600指的是token的过期时间

            with requests.get(img_url, stream=True, verify=False, timeout=self.time_out) as file:

                ret, info = put_data(token, file_path, file.content)
                if ret:
                    # 上传成功返回地址
                    return PREFIX_URL + file_path
                else:
                    print("上传失败", img_url)
                    return None
        except Exception as e:
            # 上传失败返回None
            print("上传GG", img_url, self.headers, e)
            return None


if __name__ == '__main__':
    # url = "https://www.baidu.com/img/xinshouye_d63d8cd784cea6223a26e3ce33344353.png"
    baidu_logo = "https://www.baidu.com/img/bd_logo1.png"
    qiniu_up = QiNiuUpData()
    n = qiniu_up.up_file(baidu_logo, suffix_type="png")
    print(n)
   	

注意上传视频的时候,记得用http长链接,具体操作如下
在requests请求的中加入请求头

requests.get(mp4_url, headers={
			"Connection": "keep-alive",
			}, stream=True)

这种方式稍微好一些,把请求的方式直接封装了,只需要传入url 和后缀就行,但还是有缺陷,比如图片格式我们事先不知道,不能及时给出来,还有就是图片需要其他操作,比如转格式,压缩大小之类的。

方式三 添加图片操作封装
# 等会儿后面在加上吧, 现在不想写了。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值