前段时间项目需求需要接入亚马逊的S3云服务存储视频、图片资源,但是发现网上关于Android 端Amazon S3的资料写的都不是特别充足,于是专门写一篇给需要接入此功能的作为参考。

Amazon 官网

Amazon S3 Andoroid SDK文档

1.准备工作

  1. 首先你得去Amazon平台注册一个账号传送门
    注册账号以后在你的电脑上安装CLI,这个工具是为应用创建,集成和管理AWS云服务。
  2. 假如你还没有安装:node.js和npm请点击连接下载最新版本
  3. 安装成功以后在AS的Terminal里面输入 node -v 查看当前node 版本

    输入npm -v 查看当前npm版本
  4. npm更新命令:npm-check 检查更新 npm-upgrade更新,保证正在运行至少运行Node.js的版本大于8.11+,NPM版本大于5.x

2.开始接入

  • 先依赖一下所需要的架包

     //AWSimplementation 'com.amazonaws:aws-android-sdk-s3:2.12.+'implementation('com.amazonaws:aws-android-sdk-mobile-client:2.12.+@aar') { transitive = true }implementation('com.amazonaws:aws-android-sdk-auth-userpools:2.12.+@aar') { transitive = true }implementation 'org.testng:testng:6.9.6'//Base SDKimplementation 'com.amazonaws:aws-android-sdk-core:2.12.+'//AppSync SDKimplementation 'com.amazonaws:aws-android-sdk-appsync:2.7.+'implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
    
  • 在清单文件里添加

  • 输入命令 npm install -g @aws-amplify/cli

输入命令 amplify configure


输入完成以后如图提示跳转到官网去进行用户创建和配置根据网站提示操作
创建完成用户以后会有一个用户的KeyID和Secret access key 记得保存下来

  • 在控制台Enter后会提示你选择地区我这里选择的是美国东部,控制台选择的地区和你的桶地区一致。配置好你在官网创建的Access key ID和Secret access key,之后Enter再创建你的文件名。

输入命令 amplify init初始化配置

  • 输入命令 amplify push

最后输入命令 amplify update api 我这里已经配置好了就直接显示了

  • 这个时候去你的项目里 ./app/src/main/res/raw 查看 可以看见存在一个
    awsconfiguration.json的配置文件,Buket是你的桶名,Region则是你的地区,之后需要更换桶名和地区直接在这更换就好了。

3.代码部分

  1. 由于从2.7.0版开始TransferService将不会自动启动或停止TransferUtility。所以你必须在你的Application里面添加以下代码去启动TransferService服务。
//AWS 上传mAWSAppSyncClient = AWSAppSyncClient.builder().context(getApplicationContext()).awsConfiguration(new AWSConfiguration(getApplicationContext())).build();getApplicationContext().startService(new Intent(getApplicationContext(), TransferService.class));
  • 上传文件代码,我这里上传一张图片作为案例。Constants类里填好自己的Key和密钥

private static String IMAGE_DATA_NAME = "public/user2"+DateUtil.getYear()+""+DateUtil.getMonth()+""+DateUtil.getDay()+""+ RandomUntil.getNewRandomCode(6)+".jpg";//上传头像地址(用于下次加载图片)private static String PAHT =  Constants.AMAZON_S3_PIC + IMAGE_DATA_NAME; /*** 上传到AWS*/private void AwsTest() {AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {@Overridepublic void onResult(UserStateDetails userStateDetails) {Log.i(TAG, "AWSMobileClient initialized. User State is " + userStateDetails.getUserState());}@Overridepublic void onError(Exception e) {Log.e(TAG, "Initialization error.", e);}});uploadWithTransferUtility();}public void uploadWithTransferUtility() {AWSCredentials credentials = new BasicAWSCredentials(Constants.AMAZON_S3_KEY, Constants.AMAZON_S3_KEY_PWD);TransferUtility transferUtility =TransferUtility.builder().context(getApplicationContext()).awsConfiguration(AWSMobileClient.getInstance().getConfiguration()).s3Client(new AmazonS3Client(credentials)).build();TransferObserver uploadObserver =transferUtility.upload(IMAGE_DATA_NAME,new File(mImageCropPath));// Attach a listener to the observer to get state update and progress notificationsuploadObserver.setTransferListener(new TransferListener() {@Overridepublic void onStateChanged(int id, TransferState state) {if (TransferState.COMPLETED == state) {// Handle a completed upload.LogUtil.d(TAG,"AWS上传图片:"+IMAGE_DATA_NAME+"成功");}}@Overridepublic void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {float percentDonef = ((float) bytesCurrent / (float) bytesTotal) * 100;int percentDone = (int)percentDonef;Log.d("YourActivity", "ID:" + id + " bytesCurrent: " + bytesCurrent+ " bytesTotal: " + bytesTotal + " " + percentDone + "%");}@Overridepublic void onError(int id, Exception ex) {// Handle errorsLogUtil.d(TAG,"AWS上传图片:"+IMAGE_DATA_NAME+"失败");PAHT = "";}});// If you prefer to poll for the data, instead of attaching a// listener, check for the state and progress in the observer.if (TransferState.COMPLETED == uploadObserver.getState()) {// Handle a completed upload.}Log.d("YourActivity", "Bytes Transferred: " + uploadObserver.getBytesTransferred());Log.d("YourActivity", "Bytes Total: " + uploadObserver.getBytesTotal());
}
  • 在你需要下载的ActivityonCreat方法中添加
   /*** AWS下载*/private void AwsDownld() {AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {@Overridepublic void onResult(UserStateDetails userStateDetails) {Log.i(TAG, "AWSMobileClient initialized. User State is " + userStateDetails.getUserState());}@Overridepublic void onError(Exception e) {Log.e(TAG, "Initialization error.", e);}});downloadWithTransferUtility();}private void downloadWithTransferUtility() {TransferUtility transferUtility =TransferUtility.builder().context(getApplicationContext()).awsConfiguration(AWSMobileClient.getInstance().getConfiguration()).s3Client(new AmazonS3Client(AWSMobileClient.getInstance())).build();TransferObserver downloadObserver =transferUtility.download("public/s3Key.txt",new File("/path/to/file/localFile.txt"));// Attach a listener to the observer to get state update and progress notificationsdownloadObserver.setTransferListener(new TransferListener() {@Overridepublic void onStateChanged(int id, TransferState state) {if (TransferState.COMPLETED == state) {// Handle a completed upload.}}@Overridepublic void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {float percentDonef = ((float)bytesCurrent/(float)bytesTotal) * 100;int percentDone = (int)percentDonef;Log.d("Your Activity", "   ID:" + id + "   bytesCurrent: " + bytesCurrent + "   bytesTotal: " + bytesTotal + " " + percentDone + "%");}@Overridepublic void onError(int id, Exception ex) {// Handle errors}});// If you prefer to poll for the data, instead of attaching a// listener, check for the state and progress in the observer.if (TransferState.COMPLETED == downloadObserver.getState()) {// Handle a completed upload.}Log.d("Your Activity", "Bytes Transferred: " + downloadObserver.getBytesTransferred());Log.d("Your Activity", "Bytes Total: " + downloadObserver.getBytesTotal());}
}
  • 最后上传成功后就可以在Amazon S3控制台的桶里查看了


总结

Amazon S3上传、下载只是其中两个比较简单一些的操作,还有跟踪转移、暂停、恢复删除、推送、验证等等一系列操作。

Android Amazon S3 功能接入相关推荐

  1. Amazon S3 功能介绍

    一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...

  2. Amazon S3服务 简介及基本概念

    Amazon S3介绍 什么是Amazon S3? Amazon Simple Storage Service 是互联网存储解决方案.该服务旨在降低开发人员进行网络规模级计算的难度. Amazon S ...

  3. android 极光 环信,环信、容联云通讯、极光推送和网易云信IM即时通讯功能接入方式_部署方式_企业服务汇...

    编者按:企业在挑选IM即时通讯功能服务商时,对于企业应当如何接入其IM功能.接入方式和部署方式有哪些等问题不太清楚.今天企业服务汇通过评测环信.容联云通讯.极光推送和网易云信这四家服务商来为你详细说明 ...

  4. 基于 Bitbucket Pipeline + Amazon S3 的自动化运维体系

    1 前言介绍 随着自动化运维水平的提高,一个基础的运维人员维护成百上千台节点已经不是太难的事情,当然,这需要依靠于稳定.高效的自动化运维体系.本篇文章即是阐述如何利用 bitbucket pipeli ...

  5. 将 Amazon EC2 到 Amazon S3 的数据传输推向100Gbps线速

    点击上方入口立即[自由构建 探索无限] 一起共赴年度科技盛宴! 前言 天下武功唯快不破,在很多应用场景中,如机器学习.数据分析.高性能计算等,应用需要高速加载大量数据后进行本地计算. 试想一下,您在亚 ...

  6. Amazon S3文件存储的上传下载如何测试

    相信肯定有不少小伙伴的公司用到了S3,而且在测试的过程中如何去进行测试的呢,下面通过一篇文章带你入门S3的测试. S3是什么? Amazon Simple Storage Service (Amazo ...

  7. 全方位保护您在 Amazon S3 的数据资产-访问控制详解

    2006年,Amazon S3 作为亚马逊云科技发布的第一款公有云服务面世,如今,成千上万的亚马逊云科技客户在利用 Amazon S3 创造各类激动人心的应用.从企业数据湖.机器学习存储,到 HPC. ...

  8. 马逊s3云存储接口_使用 Amazon S3 云服务轻松实现存储

    Amazon Simple Storage Service (S3) 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片.视频.音乐和文档. S3 提供一个 RESTful A ...

  9. aws s3 php,Amazon S3 预签名 POSTs 与 AWS SDK for PHP 版本 3 - 适用于 PHP 的 AWS 开发工具包...

    AWS 文档中描述的 AWS 服务或功能可能因区域而异.要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门. 本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. Am ...

最新文章

  1. 第十六界智能车竞赛:这问题怎么越来越多了呢?
  2. jackson json转对象 对象转json
  3. ifs 报表开发手册_房地产开发资质要求《暂定资质证书》相关规定
  4. 「 每日一练,快乐水题 」917. 仅仅反转字母
  5. linux chrome 管理员,Linux下google chrome浏览器flash无法启用的解决
  6. 热点的ap频段哪个快_WLAN中无线AP信道的划分
  7. 攻略:如何快速赚取积分,Get云栖大会资料
  8. LeetCode 1021 删除最外层的括号
  9. 《iOS面试之道》算法基础学习(上)
  10. Google 浏览器(2011)书签同步
  11. Java使用冒泡排序对数据进行排序,带注释
  12. Linux内核源码目录
  13. 介绍几款最好使用的模拟器怎么下载。
  14. 【C语言】—— 通讯录
  15. 周杰伦新歌刷爆朋友圈的背后 付费音乐的春天终于来了?
  16. 小米4 miui6 android,小米4如何线刷MIUI6 小米4线刷MIUI6教程【图文步骤】
  17. Ubuntu由于没有公钥,无法验证下列签名。
  18. 总有一些声音令人热血澎湃
  19. 【2018年12月05日】滚动市盈率PE最低排名
  20. G-sensor工作原理

热门文章

  1. 与君共品代码: Spelling Corrector
  2. win10系统下找不到hosts文件解决方案
  3. 如何用python计算函数的值域_(Max第一篇)Python基础代数运算大全
  4. android qq账号登陆验证手机号码,注册QQ号如何跳过手机验证
  5. 乐讯机器人精简版2016迎春版【隆重发布】
  6. 测试工具LoadRunner和OpenSTA比较分析
  7. Ol4中晕圈点效果的实现
  8. VGG16预训练学习笔记
  9. 网站SEO:百度快排是如何实现的
  10. 政考网:一年最多可以参加几次公务员考试?