具体可以参考七牛Ruby SDK的源码以及官网使用文档:
https://github.com/qiniu/ruby-sdk
http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html
上传代码
#!/usr/bin/env ruby
require 'qiniu'
# 构建鉴权对象
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
#要上传的空间
bucket = 'Bucket_Name'
#上传到七牛后保存的文件名
key = 'my-ruby-logo.png'
#构建上传策略
put_policy = Qiniu::Auth::PutPolicy.new(
bucket, # 存储空间
key, # 最终资源名,可省略,即缺省为“创建”语义,设置为nil为普通上传
3600 #token过期时间,默认为3600s
)
#生成上传 Token
uptoken = Qiniu::Auth.generate_uptoken(put_policy)
#要上传文件的本地路径
filePath = './ruby-logo.png'
#调用upload_with_token_2方法上传
code, result, response_headers = Qiniu::Storage.upload_with_token_2(
uptoken,
filePath,
key
)
#打印上传返回的信息
puts code
puts result
上传&回调
#!/usr/bin/env ruby
require 'qiniu'
# 构建鉴权对象
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
bucket = 'Bucket_Name'
key = 'my-ruby-logo.png'
put_policy = Qiniu::Auth::PutPolicy.new(
bucket, # 存储空间
key, # 最终资源名,可省略,即缺省为“创建”语义,设置为nil为普通上传
3600 #token过期时间,默认为3600s
)
#构建回调策略,这里上传文件到七牛后, 七牛将文件名和文件大小回调给业务服务器.
callback_url = 'http://your.domain.com/callback'
callback_body = 'filename=$(fname)&filesize=$(fsize)'
put_policy.callback_url= callback_url
put_policy.callback_body= callback_body
#生成上传 Token
uptoken = Qiniu::Auth.generate_uptoken(put_policy)
#要上传文件的本地路径
filePath = './ruby-logo.png'
#调用upload_with_token_2方法上传
code, result, response_headers = Qiniu::Storage.upload_with_token_2(
uptoken,
filePath,
key
)
#打印上传返回的信息
puts code
puts result
上传&预转持续化(以视频转码为例)
#!/usr/bin/env ruby
require 'qiniu'
# 构建鉴权对象
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
bucket = 'Bucket_Name'
key = 'my-ruby-logo.png'
put_policy = Qiniu::Auth::PutPolicy.new(
bucket, # 存储空间
key, # 最终资源名,可省略,即缺省为“创建”语义,设置为nil为普通上传
3600 #token过期时间,默认为3600s
)
#转码是使用的队列名称。
pipeline = 'abc' #设定自己账号下的pipleline
#要进行转码的转码操作。
fops = "avthumb/mp4/s/640x360/vb/1.25m"
#可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
saveas_key = Qiniu::Utils.urlsafe_base64_encode(目标Bucket_Name:自定义文件key)
fops = fops+'|saveas/'+saveas_key
put_policy.persistent_ops= fops
put_policy.persistent_pipeline= pipeline
#生成上传 Token
uptoken = Qiniu::Auth.generate_uptoken(put_policy)
#要上传文件的本地路径
filePath = './ruby-logo.png'
#调用upload_with_token_2方法上传
code, result, response_headers = Qiniu::Storage.upload_with_token_2(
uptoken,
filePath,
key
)
#打印上传返回的信息
puts code
puts result
注:上面的Demo只是针对视频转码,如果需要别的功能比如音视频切片、视频截图、视频拼接只需要修改下上面的fops后面的参数就可以了,
eg: fops = 'vframe/jpg/offset/1/w/480/h/360/rotate/90'就表示视频截图了。
下面给出一些常见的数据处理功能,可以根据需要进行选择:
# ------------------图片缩放-------------------
fops ='imageView/2/w/200/h/200'
# ------------------视频转码-------------------
fops ='avthumb/mp4/s/500x600/vcodec/libx265'
# ------------------图片水印-------------------
base64URL = Qiniu::Utils.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 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie2.flv')
encodedUrl2 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie3.avi')
fops = 'avconcat/2/format/mp4/'+encodedUrl1+'/'+encodedUrl2
# ------------------多文件压缩-------------------
# 可将若干七牛空间中的资源文件,在七牛服务端压缩后存储
# 格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL>
encodedfile1 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg')
encodedfile2 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4')
encodedfile3 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3')
fops = 'mkzip/2/url/'+encodedfile1+'/url/'+encodedfile2+'/url/'+encodedfile3
# -----------------图片转格式------------------
fops = 'imageView2/2/format/jpg'
可以看到上传成功后的回调行为主要是有上传 Token
中的 policy
来指定。其中policy可以指定的行为不止这些,具体可以参考签权类中的policy字段
PARAMS = {
# 字符串类型参数
:scope => "scope" ,
:save_key => "saveKey" ,
:end_user => "endUser" ,
:return_url => "returnUrl" ,
:return_body => "returnBody" ,
:callback_url => "callbackUrl" ,
:callback_host => "callbackHost" ,
:callback_body => "callbackBody" ,
:callback_body_type => "callbackBodyType" ,
:persistent_ops => "persistentOps" ,
:persistent_notify_url => "persistentNotifyUrl" ,
:persistent_pipeline => "persistentPipeline" ,
# 数值类型参数
:deadline => "deadline" ,
:insert_only => "insertOnly" ,
:fsize_limit => "fsizeLimit" ,
:callback_fetch_key => "callbackFetchKey" ,
:detect_mime => "detectMime" ,
:mime_limit => "mimeLimit"
} # PARAMS
生成下载链接
#!/usr/bin/env ruby
require 'qiniu'
Qiniu.establish_connection! :access_key => 'AK',
:secret_key => 'SK'
#构建私有空间的链接
primitive_url = 'http://domain/key'
download_url = Qiniu::Auth.authorize_download_url(primitive_url)
puts download_url
获取文件的信息
#!/usr/bin/env ruby
require 'qiniu'
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
#你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name';
key = 'ruby-logo.png';
#获取文件信息
code, result, response_headers = Qiniu::Storage.stat(
bucket, # 存储空间
key # 资源名
)
puts code
puts result
puts response_headers
移动单个文件
#!/usr/bin/env ruby
require 'qiniu'
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
#你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name';
key = 'ruby-logo.png';
#移动到的目标空间名和重命名的key
dst_bucket = 'dst_bucket'
dst_key = 'dst_key'
#移动文件
code, result, response_headers = Qiniu::Storage.move(
bucket, # 源存储空间
key, # 源资源名
dst_bucket, # 目标存储空间
dst_key # 目标资源名
)
puts code
puts result
puts response_headers
复制单个文件
#!/usr/bin/env ruby
require 'qiniu'
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
#你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name'
key = 'ruby-logo.png'
#复制到的目标空间名和重命名的key
dst_bucket = 'dst_bucket'
dst_key = 'dst_key'
#复制文件
code, result, response_headers = Qiniu::Storage.copy(
bucket, # 源存储空间
key, # 源资源名
dst_bucket, # 目标存储空间
dst_key # 目标资源名
)
puts code
puts result
puts response_headers
删除单个文件
#!/usr/bin/env ruby
require 'qiniu'
Qiniu.establish_connection! :access_key => 'Access_Key',
:secret_key => 'Secret_Key'
#你要测试的空间, 并且这个key在你空间中存在
bucket = 'Bucket_Name'
key = 'ruby-logo.png'
#删除资源
code, result, response_headers = Qiniu::Storage.delete(
bucket, # 存储空间
key # 资源名
)
puts code
puts result
puts response_headers
视频转码
#!/usr/bin/env ruby
require 'qiniu'
require 'qiniu/utils'
# 构建鉴权对象
Qiniu.establish_connection! :access_key => 'AK',
:secret_key => 'SK'
#要转码的文件所在的空间和文件名。
bucket = 'Bucket_Name'
key = '1.mp4'
#转码所使用的队列名称。
pipeline = 'abc'
#要进行转码的转码操作。
fops = "avthumb/mp4/s/640x360/vb/1.25m"
#可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
saveas_key = Qiniu::Utils.urlsafe_base64_encode(目标Bucket_Name:自定义文件key)
fops = fops+'|saveas/'+saveas_key
pfops = Qiniu::Fop::Persistance::PfopPolicy.new(
bucket, # 存储空间
key, # 最终资源名,可省略,即缺省为“创建”语义
fops,
'www.baidu.com'
)
pfops.pipeline=pipeline
code, result, response_headers = Qiniu::Fop::Persistance.pfop(pfops)
puts code
puts result
puts response_headers
注:同样,上面的Demo只是针对视频转码,如果需要别的功能比如音视频切片、视频截图、视频拼接只需要修改下上面的fops后面的参数就可以了,
eg: fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90"就表示视频截图了。
下面给出一些常见的数据处理功能,可以根据需要进行选择:
# ------------------图片缩放-------------------
fops ='imageView/2/w/200/h/200'
# ------------------视频转码-------------------
fops ='avthumb/mp4/s/500x600/vcodec/libx265'
# ------------------图片水印-------------------
base64URL = Qiniu::Utils.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 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie2.flv')
encodedUrl2 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/pingjie3.avi')
fops = 'avconcat/2/format/mp4/'+encodedUrl1+'/'+encodedUrl2
# ------------------多文件压缩-------------------
# 可将若干七牛空间中的资源文件,在七牛服务端压缩后存储
# 格式:mkzip/<mode>/url/<Base64EncodedURL>/alias/<Base64EncodedAlias>/url/<Base64EncodedURL>
encodedfile1 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/photo1.jpg')
encodedfile2 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/vedio1.mp4')
encodedfile3 = Qiniu::Utils.urlsafe_base64_encode('http://7xl4c9.com1.z0.glb.clouddn.com/audio1.mp3')
fops = 'mkzip/2/url/'+encodedfile1+'/url/'+encodedfile2+'/url/'+encodedfile3
# -----------------图片转格式------------------
fops = 'imageView2/2/format/jpg'