文档

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

更新时间:

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

前提条件

背景信息

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

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

  • 数据安全:使用灵活的授权和鉴权方式进行数据的上传和下载,更加安全。

  • 成本低廉:您不需要准备很多服务器。移动应用直接连接云存储OSS,只有控制流连接应用服务器。

  • 高并发:支持海量用户并发访问。

  • 弹性扩容:无限扩容的存储空间。

  • 数据处理:和图片处理以及音视频转码搭配使用,方便灵活地进行数据处理。

流程介绍

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

image

角色分析如下:

  • 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服务并配置应用服务器

您可以使用资源编排ROS开通STS服务并一键配置1个云服务器ECS实例,然后在云服务器ECS实例上部署应用服务器源码。使用资源编排ROS快速开通STS服务并配置应用服务器的操作步骤如下。

  1. 打开一键配置模板链接

  2. 资源编排 ROS控制台,输入资源栈名称,设置新购ECS的可用区、实例类型、系统盘类型、实例密码,然后单击创建

    资源栈的资源栈信息页签下的状态显示创建中

  3. 资源栈的状态显示创建成功后,单击输出页签,查看一键部署的云服务器ECS实例。

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

  1. 下载移动应用源码。

    Android

    下载地址

    iOS

    下载地址

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

  2. 打开移动应用,配置应用参数。

    • 应用服务器:填写步骤1:配置应用服务器中部署的应用服务器地址。

    • 上传Bucket:该移动应用要把数据上传到哪个Bucket。

    • 区域:上传Bucket所在的地域。

    • OSS文件名:需要包含应用服务器Policy配置文件里指定的前缀。

  3. 单击设置

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

  1. 打开移动应用。

  2. 单击选择图片,选择需要上传的图片,并设置OSS文件名。

  3. 上传成功后,通过控制台查看上传结果。

核心代码解析

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

Android

// 推荐使用OSSAuthCredentialsProvider,Token过期后会自动刷新。
String stsServer = "应用服务器地址,例如https://example.com:8080"
OSSCredentialProvider credentialProvider = new OSSAuthCredentialsProvider(stsServer);
// 完成以下配置项。
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:@"应用服务器地址,例如https://example.com:8080"];
client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];
  • 本页导读 (1)
文档反馈