当前位置:首页 > 代码学习 > 七牛云存储的云处理API接口-处理结果另存(saveas)

七牛云存储的云处理API接口-处理结果另存(saveas)

作者:星之宇 ┊ 时间:2014-7-24 20:52 ┊ 分类: 代码学习 ┊ 阅读:11083 ┊ 评论:10

对于玩过七牛云存储的人来说,七牛的文档水平和sdk垃圾的钥要死,还经常出现错误。经常关键性的地方没有代码文档,靠自己慢慢测试,废话不多说了。

处理结果另存(saveas)是云处理操作,将云处理结果作为资源保存到指定空间内,并赋以指定Key。保存成功后,下一次可直接通过指定Key来访问该资源,以达到提升下载速度的效果。

官方接口规格:saveas/<EncodedEntryURI>/sign/<Sign>


以下是PHP代码使用saveas云处理生成图片缩略图。

图片原始地址(七牛二级域名):http://xzyres.qiniudn.com/Tulips.jpg

图片原始地址(绑定自己的域名):http://pic.myxzy.com/Tulips.jpg


1、在下载URL(不含Scheme部分,即去除http://)后附加saveas接口(不含签名部分):

NewURL = URL + "|saveas/<EncodedEntryURI>"


<EncodedEntryURI>值获取:

entry = '<Bucket>:<Key>'

encodedEntryURI = urlsafe_base64_encode(entry)

urlsafe_base64_encode函数说明:URL安全的Base64编码适用于以URL方式传递Base64编码结果的场景。该编码方式的基本过程是先将内容以Base64格式编码为字符串,然后检查该结果字符串,将字符串中的加号+换成中划线-,并且将斜杠/换成下划线_,同时尾部保持填充等号=。


2、使用SecretKey对新的下载URL进行HMAC1-SHA1签名:

Sign = hmac_sha1(SecretKey, NewURL)


3、对签名进行URL安全的Base64编码:

EncodedSign = urlsafe_base64_encode(Sign)


4、在新的下载URL后拼接签名参数:

FinalURL = "http://"+NewURL + "/sign/<AccessKey>:<EncodedSign>"

<?php
//urlsafe_base64_encode函数
function urlsafe_base64_encode($data) {
   $data = base64_encode($data);
   $data = str_replace(array('+','/'),array('-','_'),$data);
   return $data;
 }

$accessKey = '************************';
$secretKey = '************************';

//生成EncodedEntryURI的值
$entry='xzyres:thum-Tulips.jpg';//<Key>为生成缩略图的文件名
$encodedEntryURI=urlsafe_base64_encode($entry);//生成的值:eHp5cmVzOnRodW0tVHVsaXBzLmpwZw==

//使用SecretKey对新的下载URL进行HMAC1-SHA1签名
$newurl_1 = "pic.myxzy.com/Tulips.jpg?imageView/2/w/200/h/200|saveas/".$encodedEntryURI;
$newurl_2 = "xzyres.qiniudn.com/Tulips.jpg?imageView/2/w/200/h/200|saveas/".$encodedEntryURI;
$sign_1 = hash_hmac("sha1", $newurl_1,$secretKey, true);
$sign_2 = hash_hmac("sha1", $newurl_2,$secretKey, true);

//对签名进行URL安全的Base64编码
$encodedSign_1 = urlsafe_base64_encode($sign_1);
$encodedSign_2 = urlsafe_base64_encode($sign_2);

//最终得到的完整下载URL
$finalURL_1 = "http://".$newurl_1."/sign/".$accessKey.":".$encodedSign_1;
$finalURL_2 = "http://".$newurl_2."/sign/".$accessKey.":".$encodedSign_2;
?>

云处理API连接

1、自己绑定的域名:http://pic.myxzy.com/Tulips.jpg?imageView/2/w/200/h/200|saveas/eHp5cmVzOnRodW0tVHVsaXBzLmpwZw==/sign/_jtuLhteiFKvfIJfwVLGFbn6VXF01170Cack8X3g:-LFcA0dsY40QDzm6hMyqMzeVWTM=

2、七牛二级域名:http://xzyres.qiniudn.com/Tulips.jpg?imageView/2/w/200/h/200|saveas/eHp5cmVzOnRodW0tVHVsaXBzLmpwZw==/sign/_jtuLhteiFKvfIJfwVLGFbn6VXF01170Cack8X3g:lvYWRcntWQYeTEZtQG8rYQJsFpM=


处理后可以通过缩略图key来访问了

自己域名直接访问缩略图key:http://pic.myxzy.com/thum-Tulips.jpg

七牛二级域名访问缩略图key:http://xzyres.qiniudn.com/thum-Tulips.jpg

目前有 10 条评论
avatar
游客 2016-05-26 13:51回复7楼
encodedEntryURI=urlsafe_base64_encode($entry) 生成的值太长貌似不行。。。请教下怎么处理。。谢谢
avatar
星之宇 2016-05-26 14:12回复
@游客:这个七牛应该没做限制。可能是什么地方弄错了才不行的!
avatar
游客 2016-03-01 10:08回复6楼
学习了 写的不错 我同意你的观点 七牛这个技术支持真是挺垃圾 啥都写的挺模糊
avatar
Qiaoyisi 2015-04-11 21:08回复5楼
怎么实现外链图片(网络图片)上传到七牛呢
avatar
星之宇 2015-04-13 17:24回复
@Qiaoyisi:最简单的还是图片本地化,之后在镜像站最简单
avatar
羽毛 2014-08-13 09:45回复4楼
你的  XML网站地图好详细  ZBP的xml版本网站地图插件就没有这么好用了
avatar
星之宇 2014-08-13 09:47回复
@羽毛:研究研究,有时间做个XML网站地图插件
avatar
铝单板 2014-08-10 22:45回复3楼
谢谢分享,欢迎回访
avatar
妖精的口袋 2014-07-28 15:20回复2楼
靠自己慢慢测试,废话不多说了。
avatar
变压器 2014-07-26 13:27回复1楼
学习了,谢谢