快速搭建移动应用直传服务

更新时间:2020-08-18 10:50:06

编辑我的收藏

本页目录

  • 前提条件
  • 背景信息
  • 流程介绍
  • 步骤1:开通STS服务
  • 步骤2:配置应用服务器
  • 步骤3:下载并安装移动应用
  • 步骤4:体验移动应用直传服务
  • 核心代码解析

本文主要介绍如何基于STS Policy的使用规则在30分钟内搭建一个移动应用数据直传服务。直传指的是移动应用数据的上传和下载直接连接OSS,只有控制流连接自己的服务器。

前提条件

已开通OSS服务,并已创建Bucket。

  • 开通OSS服务请参见开通OSS服务。
  • 创建Bucket请参见创建Bucket。

背景信息

在移动互联的时代,手机App上传的数据越来越多。作为开发者,您可以利用OSS处理各种数据存储需求,从而更加专注于自己的应用逻辑。

基于OSS的移动应用数据直传服务具有以下优势:

  • 数据安全:使用灵活的授权和鉴权方式进行数据的上传和下载,更加安全。
  • 成本低廉:您不需要准备很多服务器。移动应用直接连接云存储OSS,只有控制流连接应用服务器。
  • 高并发:支持海量用户并发访问。
  • 弹性扩容:无限扩容的存储空间。
  • 数据处理:和图片处理以及音视频转码搭配使用,方便灵活地进行数据处理。

流程介绍

移动应用直传服务的开发流程如下:

角色分析如下:

  • Android/iOS 移动应用:即最终用户手机上的app,负责从应用服务器申请及使用STS凭证。
  • OSS:即阿里云对象存储,负责处理移动应用的数据请求。
  • RAM/STS:负责生成临时上传凭证,即Token。
  • 应用服务器:即提供该Android/iOS应用的开发者开发的App后台服务,用于管理App上传和下载的Token,以及用户通过App上传数据的元信息。

实现步骤如下:

  1. 移动应用向应用服务器申请一个临时上传凭证。

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

  2. 应用服务器检测上述请求的合法性,然后返回Token给移动应用。
  3. Android/iOS移动应用使用此Token将数据上传到OSS,或者从OSS下载数据。

以下介绍应用服务器如何生成Token以及Android/iOS移动应用如何获取Token。

步骤1:开通STS服务

  1. 登录OSS管理控制台。
  2. 单击左侧存储空间列表上的概览。
  3. 在基础配置区域,单击安全令牌(子账号授权) > 前往RAM控制台。
  4. 单击开始授权。并按照提示完成授权。
  5. 授权完成后,保存AccessKey ID、AccessKey Secret和RoleArn三个参数。
    • 如果您未创建过AccessKey,系统自动创建AccessKey。请保存AccessKey ID、AccessKey Secret和RoleArn。
    • 如果您之前已经创建过AccessKey,也可以单击如下图所示的查看创建新的AccessKey。

步骤2:配置应用服务器

  1. 下载应用服务器代码。

    语言 下载地址
    PHP 下载地址
    Java 下载地址
    Ruby 下载地址
    Node.js 下载地址
    Go 下载地址
  2. 修改配置文件。以下例子采用PHP语言编写。每个语言的示例代码下载后,都会有一个配置文件config.json,如下所示:
    {
    "AccessKeyID" : "",
    "AccessKeySecret" : "",
    "RoleArn" : "",
    "TokenExpireTime" : "900",
    "PolicyFile": "policy/bucket_write_policy.txt"
    }

    参数描述如下:

    • AccessKeyID:填写之前记录的AccessKey ID。
    • AccessKeySecret:填写之前记录的AccessKey Secret。
    • RoleArn:填写之前记录的RoleArn。
    • TokenExpireTime:指Android/iOS应用获取到的Token的失效时间,最小值和默认值均为900s。
    • PolicyFile:该Token所拥有的权限列表的文件,可使用默认值。

    代码示例中提供了以下两种最常用的Token权限文件,位于policy目录下。使用时,需要把相应的权限文件里的$BUCKET_NAME(Bucket名称)和$OBJECT_PREFIX(文件前缀)替换成指定的值。

    • bucket_read_policy.txt:指定该Token拥有该账号下指定Bucket及指定前缀的读权限。
    • bucket_write_policy.txt:指定该Token拥有该账号下指定Bucket及指定前缀的写权限。

    如果需要更多权限设置,请参见基于RAM Policy的权限控制中的Policy示例和构建方法。 注意请务必根据业务需要,按照最小权限原则进行授权。如果您直接授予所有资源(resource:*),或者所有操作(action:*)权限,则存在由于权限范围过大导致的数据安全风险。

    警告 本代码示例仅做参考,实际线上系统务必根据不同用户或设备进行权限隔离,生成带有不同权限的Token,以避免越权。

  3. 运行示例代码。代码示例的运行方法如下:
    • 对于PHP版本,将包下载解压后,修改config.json文件,直接运行php sts.php即能生成Token,将程序部署到指定的应用服务器地址。
    • 对于Java版本(依赖于java 1.7),将包下载解压后,修改config.json文件,重新打包并运行java -jar app-token-server.jar (port)。如果不指定port(端口),直接运行java -jar app-token-server.jar,程序会监听7080端口。

    返回的数据格式解析如下:

    //正确返回
    {"StatusCode":200,"AccessKeyId":"STS.3p***dgagdasdg","AccessKeySecret":"rpnwO9***tGdrddgsR2YrTtI","SecurityToken":"CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI=","Expiration":"2017-12-12T07:49:09Z",
    }
    //错误返回
    {"StatusCode":500,"ErrorCode":"InvalidAccessKeyId.NotFound","ErrorMessage":"Specified access key is not found."
    }

    正确返回的五个变量构成一个Token:

    • StatusCode:获取Token的状态,获取成功时,返回值是200。
    • AccessKeyId:Android/iOS移动应用初始化OSSClient获取的 AccessKey ID。
    • AccessKeySecret:Android/iOS移动应用初始化OSSClient获取AccessKey Secret。
    • SecurityToken:Android/iOS移动应用初始化的Token。
    • Expiration:该Token失效的时间。Android SDK会自动判断Token是否失效,如果失效,则自动获取Token。

    错误返回说明如下:

    • StatusCode:表示获取Token的状态,获取失败时,返回值是500。
    • ErrorCode:表示错误原因。
    • ErrorMessage:表示错误的具体信息描述。

步骤3:下载并安装移动应用

  1. 下载应用源码。下载地址如下:

    • Android:下载地址
    • iOS:下载地址

    您可以通过此移动应用上传图片到OSS。上传的方法支持普通上传和断点续传上传。在网络环境差的情况下,推荐使用断点续传上传。您还可以利用图片处理服务,对要上传的图片进行缩略和加水印处理。

  2. 打开移动应用,配置应用参数。
    • 应用服务器:填写步骤2:配置应用服务器中部署的应用服务器地址。
    • 上传Bucket:该移动应用要把数据上传到哪个Bucket。
    • 区域:上传Bucket所在的地域。
    • OSS文件名:需要包含应用服务器policy配置文件里指定的前缀。
  3. 单击设置,加载配置。

步骤4:体验移动应用直传服务

  1. 打开移动应用。
  2. 单击选择图片,选择需要上传的图片,并设置OSS文件名。
  3. 上传成功后,通过控制台查看上传结果。

核心代码解析

OSS初始化的代码解析如下:

  • Android版本

    // 推荐使用OSSAuthCredentialsProvider,Token过期后会自动刷新。
    String stsServer = "应用服务器地址,例如http://abc.com:8080"
    OSSCredentialProvider credentialProvider = new OSSAuthCredentialsProvider(stsServer);
    //config
    ClientConfiguration conf = new ClientConfiguration();
    conf.setConnectionTimeout(15 * 1000); // 连接超时时间,默认15秒。
    conf.setSocketTimeout(15 * 1000); // Socket超时时间,默认15秒。
    conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个。
    conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次。
    OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);
  • iOS版本
    OSSClient * client;
    ...
    // 推荐使用OSSAuthCredentialProvider,Token过期后会自动刷新。
    id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"应用服务器地址,例如http://abc.com:8080"];
    client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

快速搭建移动应用直传服务相关推荐

  1. 30分钟快速搭建移动应用直传OSS服务

    30分钟快速搭建移动应用直传服务 背景 这是一个移动互联的时代.手机APP上传的数据会越来越多.把数据存储的问题交给OSS, 让开发者能更加专注于自己的应用逻辑. 那么怎么样基于OSS构建一个APP存 ...

  2. 快速搭建自己的跑腿服务平台:开源跑腿系统源码分享

    在现代社会,人们生活节奏加快,很多时候需要在短时间内完成各种任务,如购物.送货等.这就催生了跑腿服务的兴起.跑腿服务平台为用户提供一站式服务,让用户可以轻松地找到可靠的跑腿服务,并实现便捷快速的服务体 ...

  3. 打开git界面_使用 Gitea 快速搭建私有 Git 版本控制服务

    1. 前言 分布式版本控制工具 Git 已经是现代软件源代码版本控制首选方案之一.公有 Git 服务提供商 国外知名如 GitHub 国内网络延迟高,Gitlab 涉嫌对中国的歧视不推荐.国内有 Gi ...

  4. 在滴滴云快速搭建自己的简易服务集群(入门版)

    引言 万物互联的时代,各行各业都或多或少的接入线上,作为开发人员,我们有了小而美的产品或服务方面的想法,就把它她做出来放到线上,让它发展壮大. 我以滴滴云为例,教你一步一步的搭建自己的服务器集群,包括 ...

  5. 五分钟快速搭建Serverless免费邮件服务

    1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...

  6. 使用容器服务支持开发者快速搭建小程序后端服务

    场景描述 小程序作为一种新的开放能力被广泛应用于各业务场景,开发者可以快速地开发一个小程序,在微信可便捷地获取和传播,同时依赖微信平台原生能力获取出色的使用体验. 阿里云容器服务结合阿里云云原生能力帮 ...

  7. 极光推送零基础极速上手开发指南,快速搭建后台推送服务

    一.基础配置 1.依赖配置 <!-- 极光推送开始 --> <dependency><groupId>cn.jpush.api</groupId>< ...

  8. 快速搭建samba 简单samba服务

    基于RedHat service smb restart #/etc/init.d/smb start 1. 安装samba包 yum install samba 2. 修改相关配置文件 vim /e ...

  9. 阿里云OSS搭建移动应用直传服务的.Net C#示例

    OSS好几个都没有.Net示例,只有SDK 于是我就拿Java改成C#代码:使用前先去Nuget包管理器下载Aliyun.Acs.Core还有Aliyun.Acs.Sts: 在安装这个两个包的时候安装 ...

最新文章

  1. Windows轻松实现linux shell环境:gitforwindows
  2. 2.View绘制分析笔记之onMeasure
  3. Visual Assist X 10.8.2036的Crack破解补丁.2014.05.22 (General release.)
  4. vsFTPD编译安装使用实用手册
  5. mysql列调换位置_mysql互换表中两列数据方法
  6. ajax mysql点赞_php+mysql结合Ajax实现点赞功能完整实例
  7. 【转】PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]
  8. 协同过滤工具源码下载
  9. Java 编程思想 Chapter_14 类型信息
  10. 拓端tecdat|R语言回测交易:根据历史信号/交易创建股票收益曲线
  11. PSPNet编译心得
  12. 曲终人散,我亦是行人。
  13. 可视化之circular barplot
  14. two stage(两阶段实例分割)自上而下(Top-Down)和自下而上(Bottom-Up)
  15. 服务器购买之后要做什么(二)
  16. 图像处理之简单综合实例(大米计数)
  17. 计算机毕业设计Java东理咨询交流论坛(源码+系统+mysql数据库+lw文档)
  18. 今日Java——Cay Horstmann访谈
  19. windows server2016服务器对office online server2016进行搭建
  20. windows 2008 R2 64位系统杀毒软件

热门文章

  1. micropython中文教程.pdf_micropython中文教程
  2. android listview边框颜色,Android实现带有边框的ListView和item的方法
  3. Maven generate/构建项目太慢解决方法
  4. 计算机符串长度的函数,用js写一个函数,计算出字符串的长度
  5. 大型机 java_通过JCA错误进行Java大型机通信-连接不在事...
  6. python列表的加法_Python列表加法理解
  7. java三大框架增删改查_Java_Web三大框架之Hibernate增删改查
  8. linux的实际作用是什么,libcxxabi在linux下有意义吗?有什么好处?
  9. listctrl 优化_上海SEO整站优化公司_新站整站快速排名优化
  10. redis基础类型:string