七牛关于Python SDK的各种Demo

具体可以参考七牛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

你可能感兴趣的:(七牛关于Python SDK的各种Demo)