热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python对接七牛云上传图片代码,可运行

python对接七牛云上传图片,可运行一、准备工作注册七牛云获取:1、AccessKey(注册认证后自动生成)2、SecretKe

python对接七牛云上传图片,可运行


一、准备工作

注册七牛云获取:

1、Access Key(注册认证后自动生成)

2、Secret Key(注册认证后自动生成)

3、空间名称:ihome(创建空间时自己起的)

4、外链域名:qtsri9d.hn-bkt.clouddn.com(创建空间成功自动生成)

二、python对接七牛云代码


1、SDK源码

# sdk文档from qiniu import Auth, put_file#填写你的 Access Key 和 Secret Key
access_key = '6YixLhlCp-WNBBQjYHPRBiSKtKdtVhtIgv0Yo'
secret_key = 'd7fvWuxEGUA0uo_e_z0l4shcF75bSqmBfXGUP'# 构建鉴权对象
q = Auth(access_key, secret_key)# 要上传的空间
bucket_name = 'ihome'# 上传到七牛后保存的文件名
key = 'demo.png'# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)# 上传文件的本地路径(就是你文件存放在本地盘的什么位置)
localfile = '/home/ubuntu/Desktop/demo.png'ret, info = put_file(token, key, localfile)
print(info)
# print(info)结果显示:_ResponseInfo__response:, exception:None, status_code:200, text_body:{"hash":"FjE0k8sYsNUeG0tpmZ0cS14IxAJE","key":"demo.png"}, req_id:DNYAAABiT9yZJoMW, x_log:X-Log# 拼接路径 qtsrimd9d.hn-bkt.clouddn.com这个是创建空间分配的测试域名
image_file = 'http://qtsri9d.hn-bkt.clouddn.com/' + ret.get('key')
print(image_file) # http://qtsri9d.hn-bkt.clouddn.com/demo.png

运行结果:

.../python
.../qiniu_upload.py
_ResponseInfo__response:<Response [200]>, exception:None, status_code:200, text_body:{"hash":"FjE0k8sYsNUeG0tpmZ0cS14IxAJE","key":"demo.png"}, req_id:XgUAAADLNOs0bYMW, x_log:X-Log
http://qtsri9d.hn-bkt.clouddn.com/demo.png(此为超链接&#xff0c;点击可以直接访问上传到七牛云的图片)Process finished with exit code 0

控制台输出图片链接&#xff0c;代表上传图片到七牛云成功

2、封装成函数python代码

封装成函数&#xff0c;在需要存储图片的地方&#xff0c;调用该函数。

# -*- coding: utf-8 -*-
# flake8: noqa
import uuid
from qiniu import Auth, put_file# 需要填写你的 Access Key 和 Secret Key 步骤3详细说明
access_key &#61; &#39;6YixLhlCp-WNBBQjYHPRBiSKtKdtVhtIgv0Yo&#39;
secret_key &#61; &#39;d7fvWuxEGUA0uo_e_z0l4shcF75bSqmBfXGUP&#39;# 生成上传凭证
def qiniu_token(bucked_name, key):q &#61; Auth(access_key&#61;access_key,secret_key&#61;secret_key)token &#61; q.upload_token(bucked_name, key)return tokendef upload_img(): """收集本地信息到云服务器上参考地址&#xff1a;https://developer.qiniu.com/kodo/sdk/1242/python"""bucked_name &#61; &#39;ihome&#39;# 指定图片名称,上传后保存的文件名file_name &#61; &#39;{}.png&#39;.format(uuid.uuid4())# 指定上传空间&#xff0c;获取tokentoken &#61; qiniu_token(bucked_name, file_name)file_path &#61; &#39;/home/ubuntu/Desktop/demo.png&#39;ret, info &#61; put_file(token, file_name, file_path)image_file &#61; &#39;http://qtsri9d.hn-bkt.clouddn.com/&#39; &#43; ret.get(&#39;key&#39;)return image_file# 测试
if __name__ &#61;&#61; &#39;__main__&#39;:img_url &#61; upload_img()print(img_url) # http://qtsri9d.hn-bkt.clouddn.com/7c0d346b-fd56-4984-80ec-2998d3daf690.png

使用&#xff1a;直接调用upload_img&#xff08;&#xff09;函数即可上传本地图片到七牛云

3、封装成有参函数并且调用代码

需求&#xff1a;数据库只存储图片的链接的key部分&#xff0c;即:7c0d346b-fd56-4984-80ec-2998d3daf690.png。

所以&#xff0c;upload_img(file_path)只需返回key值即可&#xff0c;不需要返回完整的七牛云链接。

并将图片的本地地址通过参数传递。

# -*- coding: utf-8 -*-
# flake8: noqa
import uuid
from qiniu import Auth, put_file# 需要填写你的 Access Key 和 Secret Key 步骤3详细说明
access_key &#61; &#39;6YixLhlCp-WNBBQjYHPRBiSKtKdtVhtIgv0Yo&#39;
secret_key &#61; &#39;d7fvWuxEGUA0uo_e_z0l4shcF75bSqmBfXGUP&#39;# 生成上传凭证
def qiniu_token(bucked_name, key):q &#61; Auth(access_key&#61;access_key,secret_key&#61;secret_key)token &#61; q.upload_token(bucked_name, key)return tokendef upload_img(file_path):"""收集本地信息到云服务器上参考地址&#xff1a;https://developer.qiniu.com/kodo/sdk/1242/python"""bucked_name &#61; &#39;ihome&#39;# 指定图片名称,上传后保存的文件名file_name &#61; &#39;{}.png&#39;.format(uuid.uuid4())# 指定上传空间&#xff0c;获取tokentoken &#61; qiniu_token(bucked_name, file_name)# file_path &#61; &#39;/home/ubuntu/Desktop/demo.png&#39;ret, info &#61; put_file(token, file_name, file_path)img_key &#61; ret.get(&#39;key&#39;)return img_key

调用

from libs.qiniuyun.qiniu_upload import upload_img
class UserCenter(View):def post(self, request):"""上传用户头像"""if request.user.is_authenticated:image_data &#61; request.FILES.get(&#39;avatar&#39;)# 要上传文件的本地路径image_path &#61; &#39;/home/ubuntu/Desktop/&#39; &#43; image_data.nameimg_key &#61; upload_img(image_path) # 调用封装好的图片上传函数 upload_imgtry:user&#61;User.objects.filter(id&#61;request.user.id).update(avatar&#61;img_key)# 拼接七牛云完整链接返回给前端domain_name &#61; &#39;http://qtsri9d.hn-bkt.clouddn.com/&#39;img_url &#61; str(domain_name &#43; img_key)# 返回更新后的数据data &#61; {"avatar_url": img_url}return JsonResponse({&#39;data&#39;: data,"errno": "0","errmsg": "头像上传成功",})except Exception as e:# 数据库查询错误return JsonResponse({&#39;errno&#39;: 4001,&#39;errmsg&#39;: "DBERR"})else:# 用户未登录return JsonResponse({&#39;errno&#39;: 4101,&#39;errmsg&#39;: "SESSIONERR"})


推荐阅读
author-avatar
觅树知音
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有