android开发游记:图片的上传下载-使用七牛云存储管理图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liaoinstan/article/details/49275353

我们一般都是使用第三方云存储服务来管理图片,图片并不保存在本地,这样的结构,为后台的开发人员省去了很多精力。目前的云存储服务对资源的管理也非常便捷技术也相对成熟,这里我就介绍下目前用的比较多的的七牛云存储服务来管理我们上传的图片。

首先看一张图片:
这里写图片描述

我们的图片是存储在七牛的服务器上,所以我们上传图片是上传到七牛的服务器,但是七牛并不是允许所有人都有资格上传,我们自己的业务服务器首先需要注册七牛的账号申请空间,然后会得到上传下载凭证token,我们上传图片之前应该首先向自己的服务器请求这个token,然后用这个token来向七牛的服务器上传图片,请求的格式如下

POST: http://up.qiniu.com
token :你的上传下载凭证
format : 图片格式,如:jpg
file : 图片的二进制代码
key : 图片名

其中key是一个自定义的字符串,上传后会成为图片的文件名,因为七牛空间是没有目录分级的所以图片名要求不能重复,所有key值最好是一个随机生成的不重复串,我一般使用的是 时间+UUID

上传成功后会返回一个hash码和key值:
{
hash:xxxx,
key:xxxx
}

七牛通过hash码来判断上传的图片是否重复,如果重复就不上传了,key则是你上传时自定义的文件名,这里原样返回给你,那我们上传成功了,可是图片的外链呢?怎么没有返回?,其实我们在我们空间的域名+key就是图片的外链了。
假如我们申请的空间的域名是:
http://7xir1b.com2.xx.glb.qiniucdn.com
我们填写的key值是:
201510201103xxxxx.jpg
那么我们上传的图片外链就是:
http://7xir1b.com2.xx.glb.qiniucdn.com/201510201103xxxxx.jpg

到这里我们再把这个链接交个自己的业务服务器保存下来,整个上传过程就完成了,下次访问图片的时候就直接使用外链就ok,可以在浏览器打开看一下是否上传成功

七牛的资源可以分为公有和私有2中,公有的资源直接通过外链就可以访问,但私有资源不行,私有资源主要用于包含某些用户敏感信息,比如:身份证,那我们要怎么访问使用资源呢?

还是先看个图:
这里写图片描述

我们上传了一张图到使用库,但是我们还不能直接通过域名+key的方式访问它,我们必须先把key值传回给自己的业务服务器,服务器去注册签名授权,然后构造url再返回给客户端,客户端再通过这个返回的链接来访问资源图片。

至于业务服务器如何授权和构造url这里不做讨论,下面贴上官方sdk文档的说明:

私有资源下载

当用户将空间设置成私有后,所有对空间内资源的访问都必须获得授权。

私有资源下载也是通过一个URL完成。与公有资源下载不同的是,URL中增加了 e 和 token 两个参数,分别用于放置URL的过期时间和下载凭证(Download Token):

http:///?e=&token=
实际上,私有资源下载使用的URL就是在公有资源下载URL后加上 e 和 token 两个参数。

参数 e 表示URL的过期时间,采用Unix时间。当此参数指定的时间一过,URL随即失效,七牛云存储将视此URL为无效请求,任何人都无法凭此URL访问所指的资源。需要注意的是,如果发起请求的应用客户端,或应用服务器的时钟偏离标准Unix时间,那么可能会造成URL尚未使用便已过期。所以, 应用客户端或应用服务器的时钟应当同Unix时间校准。

参数 token 携带下载凭证。下载凭证是对资源访问的授权,通过对请求的签名,确保下载请求是获得资源所有者的合法授权的。

下载凭证

下载凭证是对下载URL中,除 token 参数以外的部分的加密签名。整个过程并不复杂:

构造出资源的URL:

http://my-bucket.qiniu.com/sunflower.jpg
接着,加上URL的过期时间:

http://my-bucket.qiniu.com/sunflower.jpg?e=1451491200
然后,对所得的URL进行HMAC-SHA1的加密,密钥是用户的SecretKey,并做URL安全的Base64编码:

urlsafe_base64_encode(hmac_sha1(
secret_key,
"http://my-bucket.qiniu.com/sunflower.jpg?e=1451491200"
))

得到

HbAKtTogKqDLWEkq7zVSX6T35NI=
最后,将生成的签名串同AccessKey按照 : 的格式连接起来最终得到下载凭证:

j6XaEDm5DwWvn0H9TTJs9MugjunHK8Cwo3luCglo:HbAKtTogKqDLWEkq7zVSX6T35NI=
在下载资源时,把下载凭证作为 token 参数追加至URL的尾部:

http://my-bucket.qiniu.com/sunflower.jpg?e=1451491200&token=j6XaEDm5DwWvn0H9TTJs9MugjunHK8Cwo3luCglo:HbAKtTogKqDLWEkq7zVSX6T35NI=

七牛云存储收到此请求后,会从URL中分离出 token ,对其余部分执行签名算法,以验证URL的合法性。同时,七牛云存储还将验证URL是否过期。

注意: token 应当位于整个URL的最后,作为最后一个参数。

没有更多推荐了,返回首页