OSS如何实现快速搭建移动应用直传服务(一)?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

OSS如何实现快速搭建移动应用直传服务(一)?

青衫无名 2017-10-18 10:03:23 1660

背景


在移动互联的时代,手机APP上传的数据越来越多,我们可以把数据存储的问题交给OSS,让开发者更加专注于自己的应用逻辑。
本文主要介绍如何在30分钟内搭建一个基于OSS的移动应用数据直传服务。所谓直传就是移动应用数据的上传和下载直接连接OSS,只有控制流走用户自己的服务器。

优势


搭建一个基于OSS的移动应用数据直传服务,具有以下优势:
  • 上传下载方式更加安全(临时、灵活的赋权鉴权)。
  • 成本低,用户不需要准备很多服务器。移动应用直联云存储,只有控制流走用户自己的应用服务器。
  • 高并发,支持海量用户(OSS有海量的上传和下载带宽)。
  • 弹性(OSS有无限扩容的存储空间)。
  • 方便,可以方便的对接到媒体转码服务-视频多端适配,图片处理服务,CDN加速下载等。

[backcolor=transparent]架构图如下所示:

详细请参考 这里
[backcolor=transparent]解析:
  • Android/iOS 移动应用,即最终用户手机上的APP。
  • OSS,即阿里云对象存储,负责存储APP上传的数据,可以参考官网介绍
  • RAM/STS负责生成临时上传凭证。
  • 用户应用服务器,即提供该Android/iOS应用的开发者开发的APP后台服务,管理APP上传和下载的Token,以及用户在APP上传数据的元数据信息。


实现步骤


  1. 应用向用户的应用服务器申请一个临时上传凭证。
    Android/iOS应用不能直接存储AccessKeyID/AccessKeySecret,这样会存在泄密的风险。所以应用必须向用户的应用服务器申请一个临时上传凭证(下文将此临时上传凭证称为Token)。这个Token是有时效性的,如果这个Token的过期时间是30分钟(这个时间可以由应用服务器指定),那么在这30分钟里面,该Android/iOS应用可以使用这个Token从OSS上传和下载数据, 30分钟后再重新获取。

  2. 用户的应用服务器检测上述请求的合法性,然后返回Token给应用。

  3. 手机拿到这个Token后就可以将数据上传到OSS,或者从OSS下载数据了。

本文档主要介绍下图中红色和蓝色框的内容。
  • 蓝色框:应用服务器如何生成这个Token
  • 红色框: Android/iOS应用如何获取Token

[backcolor=transparent]实现效果:
如下图所示,您可以扫描二维码,安装示例APP程序。此工具是用Android开发的,本文档的应用服务器也适用于iOS。

[backcolor=transparent]示例应用的最终效果图如下:

[backcolor=transparent]注意:应用服务器中的地址是示例地址。您可以参考文章结尾的STS应用服务器代码,自己部署应用服务器。



  • [backcolor=transparent]应用服务器:该移动应用对应的后台应用服务器。

  • [backcolor=transparent]上传Bucket:该移动应用要把数据上传到哪个Bucket。

  • [backcolor=transparent]区域:[backcolor=transparent]上传Bucket对应的区域。

[backcolor=transparent]示例APP的使用步骤:

  • 单击[backcolor=transparent]选择图片,然后把文件上传到OSS。

  • 上传的方法支持普通上传和断点上传。

    [backcolor=transparent]注意:在一些网络环境差的情况下,最好用断点上传。可以利用图片处理服务,对将要上传的图片进行缩略和加水印处理。初始使用请暂时先不要更改应用服务器地址和Bucket名字。


搭建直传服务前提条件


搭建直传服务需要完成以下准备工作:

  1. 开通OSS,并且创建Bucket

  2. 开通STS服务。
    登录 OSS管理控制台

  3. 在OSS[backcolor=transparent]概览页中找到[backcolor=transparent]基础配置区域,单击 [backcolor=transparent]安全令牌,如下图所示:

  4. 进入到 [backcolor=transparent]安全令牌快捷配置 页面。

    注意:如果没有开通RAM,会弹出开通的对话框。直接单击 [backcolor=transparent]开通,并进行实名验证。做完后跳到本页面。单击 [backcolor=transparent]开始授权。


  5. 系进行自动授权,请务必保存下图中三个红框内的参数。单击[backcolor=transparent]保存AK信息后,对话框会关闭,STS的开通完成。


  6. 如果您之前已经创建了AccessKeyId/AccessKeySecret, 打开的页面如下:

    您可以单击如下图所示的[backcolor=transparent]查看。

  7. 单击如下图所示的[backcolor=transparent]创建AccessKey。

  8. 记下如下参数1、2、3。


  9. 保存这三个参数后,STS的开通已经完成了。


搭建一个应用服务器



应用服务器示例的配置


注意:这个例子是采用PHP编写的,用户也可以选择自己喜欢的语言进行编写,如Java 、Python、 Go、Ruby、Node.js、C#等。

为了方便开发,本教程提供了三个语言的版本示例程序供您下载。

每个语言包下载下来后,都会有一个配置文件config.json如下所示:
  1. [backcolor=transparent]{
  2. [backcolor=transparent]"AccessKeyID"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]""[backcolor=transparent],
  3. [backcolor=transparent]"AccessKeySecret"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]""[backcolor=transparent],
  4. [backcolor=transparent]"RoleArn"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]""[backcolor=transparent],
  5. [backcolor=transparent]"TokenExpireTime"[backcolor=transparent] [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"900"[backcolor=transparent],
  6. [backcolor=transparent]"PolicyFile"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"policy/all_policy.txt"
  7. [backcolor=transparent]}

说明:
  1. [backcolor=transparent]AccessKeyID: 填写上述图标红的参数1的内容。
  2. [backcolor=transparent]AccessKeySecret: 填写上述图标红的参数2的内容。
  3. [backcolor=transparent]RoleArn: 填写上述图标红的参数3的内容。
  4. [backcolor=transparent]TokenExpireTime: 指Android/iOS应用取到这个Token的失效时间,注意,最少是900s,默认值可以不修改。
  5. [backcolor=transparent]PolicyFile: 填写的是该Token所要拥有的权限列表的文件, 默认值可以不修改。

本文档准备了三种最常用token权限文件,放于policy目录下面。分别是:
  • all_policy.txt:指定了该token拥有对该账号下创建Bucket、删除Bucket、上传文件、下载文件、删除文件的权限 。
  • bucket_read_policy.txt:指定了该token拥有该账号下对指定Bucket的读权限。
  • bucket_read_write_policy.txt: 指定了该token拥有该账号下对指定Bucket的读写权限。

如果您想要指定这个Token只能对指定的bucket有读写权限, 请把(bucket_read_policy.txt、 bucket_read_write_policy.txt)这些文件里面$BUCKET_NAME直接替换成指定的bucket名字。
[backcolor=transparent]返回的格式解析:
  1. [backcolor=transparent]{
  2. [backcolor=transparent]    [backcolor=transparent]"status"[backcolor=transparent]:[backcolor=transparent]200[backcolor=transparent],
  3. [backcolor=transparent]    [backcolor=transparent]"AccessKeyId"[backcolor=transparent]:[backcolor=transparent]"STS.3pYjsdgdgagdasdg"[backcolor=transparent],
  4. [backcolor=transparent]    [backcolor=transparent]"AccessKeySecret"[backcolor=transparent]:[backcolor=transparent]"rpnwO9kvEgetGdrddgsR2YrTtI"[backcolor=transparent],
  5. [backcolor=transparent]   [backcolor=transparent]"Security"[backcolor=transparent]:[backcolor=transparent]"CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI="[backcolor=transparent],
  6. [backcolor=transparent]   [backcolor=transparent]"Expiration"[backcolor=transparent]:[backcolor=transparent]"2015-12-12T07:49:09Z"[backcolor=transparent],
  7. [backcolor=transparent]}

说明(下面四个变量将构成了一个Token。):
  • [backcolor=transparent]status:表示获取Token的状态,获取成功时,返回值是200。
  • [backcolor=transparent]AccessKeyId: 表示Android/iOS应用初始化OSSClient获取的 AccessKeyId。
  • [backcolor=transparent]AccessKeySecret: 表示Android/iOS应用初始化OSSClient获取AccessKeySecret。
  • [backcolor=transparent]SecurityToken:表示Android/iOS应用初始化的Token。
  • [backcolor=transparent]Expiration: 表示该Token失效的时间。主要在Android SDK会自动判断是否失效,自动获取Token。

[backcolor=transparent]代码示例的运行方法:

  • 对于PHP版本,将包下载解压后,修改config.json这个文件,直接运行php sts.php 即能生成Token,将程序部署到指定的地址。

  • 对于JAVA版本 (依赖于java 1.7),将包下载解压后
    运行方法:java -jar oss-token-server.jar (port)。如果不指定port(端口), 直接运行java –jar oss-token-server.jar,程序会监听7080端口。如果想让程序执行在9000端口,运行java –jar app-token-server.jar 9000 , 其他端口也类似。
存储 安全 Java 应用服务中间件 PHP 对象存储 Android开发 iOS开发 开发者 Ruby
分享到
取消 提交回答
全部回答(0)
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程