具体可以参考七牛Python SDK的源码以及官网使用文档:
https://github.com/qiniu/python-sdk
http://developer.qiniu.com/docs/v6/sdk/python-sdk.html
上传代码
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config
#需要填写你的 Access Key 和 Secret Key
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#构建鉴权对象
q = Auth(access_key, secret_key)
#要上传的空间
bucket_name = 'Bucket_Name'
#上传到七牛后保存的文件名
key = 'my-python-logo.png';
#生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
#要上传文件的本地路径
localfile = './sync/bbb.jpg'
ret, info = put_file(token, key, localfile)
print(info)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
上传&回调
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag,
import qiniu.config
access_key = 'Access_Key'
secret_key = 'Secret_Key'
q = Auth(access_key, secret_key)
bucket_name = 'Bucket_Name'
key = 'my-python-logo.png';
#上传文件到七牛后, 七牛将文件名和文件大小回调给业务服务器.
policy={
'callbackUrl':'http://your.domain.com/callback.php',
'callbackBody':'filename=$(fname)&filesize=$(fsize)'
}
token = q.upload_token(bucket_name, key, 3600, policy)
localfile = './sync/bbb.jpg'
ret, info = put_file(token, key, localfile)
print(info)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
上传&预转持续化(以视频转码为例)
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config
access_key = 'Access_Key'
secret_key = 'Secret_Key'
q = Auth(access_key, secret_key)
bucket_name = 'Bucket_Name'
key = 'my-python-logo.png'
#设置转码参数
fops = 'avthumb/mp4/s/640x360/vb/1.25m'
#转码是使用的队列名称
pipeline = 'abc'
#可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间
saveas_key = urlsafe_base64_encode('目标Bucket_Name:自定义文件key')
fops = fops+'|saveas/'+saveas_key
#在上传策略中指定
policy={
'persistentOps':fops,
'persistentPipeline':pipeline
}
token = q.upload_token(bucket_name, key, 3600, policy)
localfile = './sync/bbb.jpg'
ret, info = put_file(token, key, localfile)
print(info)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
注:上面的Demo只是针对视频转码,如果需要别的功能比如音视频切片、视频截图、视频拼接只需要修改下上面的fops后面的参数就可以了,
eg: fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90'就表示视频截图了。
下面给出一些常见的数据处理功能,可以根据需要进行选择:
# ------------------图片缩放-------------------
fops ='imageView/2/w/200/h/200';
# ------------------视频转码-------------------
fops ='avthumb/avi/s/500x600';
# ------------------图片水印-------------------
base64URL = urlsafe_base64_encode('http://developer.qiniu.com/resource/logo-2.jpg');
fops = 'watermark/1/image/'+base64URL;
# ------------------视频切片-------------------
fops = 'avthumb/m3u8/segtime/10/s/500x600';
# ------------------文档转换-------------------
fops = 'yifangyun_preview';
# ------------------视频截图-------------------
fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90';
# ------------------视频拼接-------------------
# 拼接视频片段时要保证所有源的画面长宽值一致
# 除去作为数据处理对象的源文件以外,还可以指定最多5个源文件(即总计6个片段)
# 所有源文件必须属于同一存储空间
# 格式:avconcat/<Mode>/format/<Format>/<encodedUrl0>/<encodedUrl1>/<encodedUrl2>/...
encodedUrl1 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441616721865.mp4');
encodedUrl2 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441685592717.mp4');
encodedUrl3 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441694386697.mp4');
encodedUrl4 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441616287490.mp4');
encodedUrl5 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441616080744.mp4');
fops = 'avconcat/2/format/mp4/'+encodedUrl1+'/'+encodedUrl2+'/'+encodedUrl3+'/'+encodedUrl4+'/'+encodedUrl5;
# ------------------多文件压缩-------------------
# 可将若干七牛空间中的资源文件,在七牛服务端压缩后存储
# 格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL>
encodedfile1 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg');
encodedfile2 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4');
encodedfile3 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3');
fops = 'mkzip/2/url/'+encodedfile1+'/url/'+encodedfile2+'/url/'+encodedfile3;
# ------------------多视频水印-------------------
encodedfile1 = urlsafe_base64_encode('http://7xkvzb.com5.z0.glb.qiniucdn.com/1.png');
encodedfile2 = urlsafe_base64_encode('http://7xkvzb.com2.z0.glb.qiniucdn.com/2-2.png');
# encodedfile3 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3');
fops1 = 'avthumb/mp4/s/1280x720/aspect/16:9/wmImage/'+encodedfile1+'/wmGravity/Center';
fops2 = 'avthumb/mp4/s/1280x720/aspect/16:9/wmImage/'+encodedfile2+'/wmGravity/SouthEast';
fops = fops1+'|'+ fops2
可以看到上传成功后的回调行为主要是有上传 Token
中的 policy
来指定。其中policy可以指定的行为不止这些,具体可以参考签权类中的policy字段:
_policy_fields = set([
'callbackUrl', # 回调URL
'callbackBody', # 回调Body
'callbackHost', # 回调URL指定的Host
'callbackBodyType', # 回调Body的Content-Type
'callbackFetchKey', # 回调FetchKey模式开关
'returnUrl', # 上传端的303跳转URL
'returnBody', # 上传端简单反馈获取的Body
'endUser', # 回调时上传端标识
'saveKey', # 自定义资源名
'insertOnly', # 插入模式开关
'detectMime', # MimeType侦测开关
'mimeLimit', # MimeType限制
'fsizeLimit', # 上传文件大小限制
'fsizeMin', # 上传文件最少字节数
'persistentOps', # 持久化处理操作
'persistentNotifyUrl', # 持久化处理结果通知URL
'persistentPipeline', # 持久化处理独享队列
])
私有空间下载
# -*- coding: utf-8 -*-
# flake8: noqa
import requests
from qiniu import Auth
access_key = 'AK'
secret_key = 'SK'
q = Auth(access_key, secret_key)
#有两种方式构造base_url的形式
base_url = 'http://%s/%s' % (bucket_domain, key)
#或者直接输入url的方式下载
base_url = 'http://domain/key'
#可以设置token过期时间
private_url = q.private_download_url(base_url, expires=3600)
print(private_url)
r = requests.get(private_url)
assert r.status_code == 200
获取文件的信息
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth
from qiniu import BucketManager
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#初始化Auth状态
q = Auth(access_key, secret_key)
#初始化BucketManager
bucket = BucketManager(q)
#你要测试的空间, 并且这个key在你空间中存在
bucket_name = 'Bucket_Name'
key = 'python-logo.png'
#获取文件的状态信息
ret, info = bucket.stat(bucket_name, key)
print(info)
assert 'hash' in ret
移动单个文件
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth
from qiniu import BucketManager
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#初始化Auth状态
q = Auth(access_key, secret_key)
#初始化BucketManager
bucket = BucketManager(q)
#你要测试的空间, 并且这个key在你空间中存在
bucket_name = 'Bucket_Name'
key = 'python-logo.png'
#将文件从文件key 移动到文件key2,可以实现文件的重命名 可以在不同bucket移动
key2 = 'python-logo2.png'
ret, info = bucket.move(bucket_name, key, bucket_name, key2)
print(info)
assert ret == {}
复制单个文件
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth
from qiniu import BucketManager
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#初始化Auth状态
q = Auth(access_key, secret_key)
#初始化BucketManager
bucket = BucketManager(q)
#你要测试的空间, 并且这个key在你空间中存在
bucket_name = 'Bucket_Name'
key = 'python-logo.png'
#将文件从文件key 复制到文件key2。 可以在不同bucket复制
key2 = 'python-logo2.png'
ret, info = bucket.copy(bucket_name, key, bucket_name, key2)
print(info)
assert ret == {}
删除单个文件
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth
from qiniu import BucketManager
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#初始化Auth状态
q = Auth(access_key, secret_key)
#初始化BucketManager
bucket = BucketManager(q)
#你要测试的空间, 并且这个key在你空间中存在
bucket_name = 'Bucket_Name'
key = 'python-logo.png'
#删除bucket_name 中的文件 key
ret, info =bucket.delete(bucket_name, key)
print(info)
assert ret == {}
视频转码
# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, PersistentFop, build_op, op_save, urlsafe_base64_encode
#对已经上传到七牛的视频发起异步转码操作
access_key = 'Access_Key'
secret_key = 'Secret_Key'
q = Auth(access_key, secret_key)
#要转码的文件所在的空间和文件名。
bucket = 'Bucket_Name'
key = '1.mp4'
#转码是使用的队列名称。
pipeline = 'mpsdemo'
#要进行转码的转码操作。
fops = 'avthumb/mp4/s/640x360/vb/1.25m'
#可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间
saveas_key = urlsafe_base64_encode('目标Bucket_Name:自定义文件key')
fops = fops+'|saveas/'+saveas_key
pfop = PersistentFop(q, bucket, pipeline)
ops = []
ops.append(fops)
ret, info = pfop.execute(key, ops, 1)
print(info)
assert ret['persistentId'] is not None
注:同样,上面的Demo只是针对视频转码,如果需要别的功能比如音视频切片、视频截图、视频拼接只需要修改下上面的fops后面的参数就可以了,
eg: fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90"就表示视频截图了。
下面给出一些常见的数据处理功能,可以根据需要进行选择:
# ------------------图片缩放-------------------
fops ='imageView/2/w/200/h/200';
# ------------------视频转码-------------------
fops ='avthumb/avi/s/500x600';
# ------------------图片水印-------------------
base64URL = urlsafe_base64_encode('http://developer.qiniu.com/resource/logo-2.jpg');
fops = 'watermark/1/image/'+base64URL;
# ------------------视频切片-------------------
fops = 'avthumb/m3u8/segtime/10/s/500x600';
# ------------------文档转换-------------------
fops = 'yifangyun_preview';
# ------------------视频截图-------------------
fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90';
# ------------------视频拼接-------------------
# 拼接视频片段时要保证所有源的画面长宽值一致
# 除去作为数据处理对象的源文件以外,还可以指定最多5个源文件(即总计6个片段)
# 所有源文件必须属于同一存储空间
# 格式:avconcat/<Mode>/format/<Format>/<encodedUrl0>/<encodedUrl1>/<encodedUrl2>/...
encodedUrl1 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441616721865.mp4');
encodedUrl2 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441685592717.mp4');
encodedUrl3 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441694386697.mp4');
encodedUrl4 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441616287490.mp4');
encodedUrl5 = urlsafe_base64_encode('http://7xl4cg.com1.z0.glb.clouddn.com/NEWAND_PALVIDEO1441616080744.mp4');
fops = 'avconcat/2/format/mp4/'+encodedUrl1+'/'+encodedUrl2+'/'+encodedUrl3+'/'+encodedUrl4+'/'+encodedUrl5;
# ------------------多文件压缩-------------------
# 可将若干七牛空间中的资源文件,在七牛服务端压缩后存储
# 格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL>
encodedfile1 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg');
encodedfile2 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4');
encodedfile3 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3');
fops = 'mkzip/2/url/'+encodedfile1+'/url/'+encodedfile2+'/url/'+encodedfile3;
# ------------------多视频水印-------------------
encodedfile1 = urlsafe_base64_encode('http://7xkvzb.com5.z0.glb.qiniucdn.com/1.png');
encodedfile2 = urlsafe_base64_encode('http://7xkvzb.com2.z0.glb.qiniucdn.com/2-2.png');
# encodedfile3 = urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3');
fops1 = 'avthumb/mp4/s/1280x720/aspect/16:9/wmImage/'+encodedfile1+'/wmGravity/Center';
fops2 = 'avthumb/mp4/s/1280x720/aspect/16:9/wmImage/'+encodedfile2+'/wmGravity/SouthEast';
fops = fops1+'|'+ fops2