python对接七牛云上传图片,可运行
一、准备工作
注册七牛云获取:
1、Access Key(注册认证后自动生成)
2、Secret Key(注册认证后自动生成)
3、空间名称:ihome(创建空间时自己起的)
4、外链域名:qtsri9d.hn-bkt.clouddn.com(创建空间成功自动生成)
二、python对接七牛云代码
1、SDK源码
from qiniu import Auth, put_file
access_key = '6YixLhlCp-WNBBQjYHPRBiSKtKdtVhtIgv0Yo'
secret_key = 'd7fvWuxEGUA0uo_e_z0l4shcF75bSqmBfXGUP'
q = Auth(access_key, secret_key)
bucket_name = 'ihome'
key = 'demo.png'
token = q.upload_token(bucket_name, key, 3600)
localfile = '/home/ubuntu/Desktop/demo.png'ret, info = put_file(token, key, localfile)
print(info)
image_file = 'http://qtsri9d.hn-bkt.clouddn.com/' + ret.get('key')
print(image_file)
运行结果:
.../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;调用该函数。
import uuid
from qiniu import Auth, put_file
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())token &#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)
使用&#xff1a;直接调用upload_img&#xff08;&#xff09;函数即可上传本地图片到七牛云
3、封装成有参函数并且调用代码
需求&#xff1a;数据库只存储图片的链接的key部分&#xff0c;即:7c0d346b-fd56-4984-80ec-2998d3daf690.png。
所以&#xff0c;upload_img(file_path)只需返回key值即可&#xff0c;不需要返回完整的七牛云链接。
并将图片的本地地址通过参数传递。
import uuid
from qiniu import Auth, put_file
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())token &#61; qiniu_token(bucked_name, file_name)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) try: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"})