我可以将图像从Android上传到Amazon s3.但是它们始终是私有的,没有人可以显示它们.我必须在Amazon s3管理控制台上将其公开.上传图像时,我无法为图像设置ACL.
我了解到,有两种方法可以将图像从Android上传到Amazon s3:
>使用PutObjectRequest
>使用TransferUtility.upload()
我都尝试过.如果我更喜欢PutObjectRequest,则必须使用AsyncTask或其他线程.因为PutObjectRequest在主线程上运行.但是我不想使用AsyncTask或其他线程.
我想使用TransferUtility,因为它不能在主线程上运行,不能在服务上运行,所以我不必使用AsyncTask或其他线程.我也可以轻松跟踪进度和转移状态.此外,TransferUtility比PubObjectRequest更新.但是问题来了:我不知道如何在将对象上传到s3时或之前设置对象的ACL.我试过了
s3Client.setObjectAcl("myBucket", "steve_jobs.jpg", CannedAccessControlList.PublicRead);
但它返回“主线程网络”错误.所以我需要使用AsyncTask或另一个线程.但是我不想使用AsyncTask或另一个线程.使用TransferUtility上传对象时如何设置对象的ACL?
我可以将图像从Android上传到Amazon s3.但是它们始终是私有的,没有人可以显示它们.我必须在Amazon s3管理控制台上将其公开.上传图像时,我无法为图像设置ACL.我了解到,有两种方法可以将图像从Android上传到Amazon s3:>使用PutObjectRequest>使用TransferUtility.upload()我都尝试过.如果我更喜欢PutObjectR...
implementation "com.
amazon
aws
:
aws
-
android
-sdk-
s3
:2.22.1"
implementation ("com.
amazon
aws
:
aws
-
android
-sdk-mobile-client:2.22.1") { transitive = true }
新建Util类:
public class Util {
private static final String TAG = Util.class.getS
上传
文件
时
,有
时
候需要
上传
大文件,但是当网络不好、或者断网
时
,容易导致之前
上传
的内容失败,功亏一篑。这
时
就可以使用分段
上传
。
分段
上传
就是将文件分为几部分分开
上传
,哪一部分
上传
失败就重传这部分内容,最后所有部分
上传
完成,再合在一起。
前段
时
间项目需求需要接入亚马逊的
S3
云服务存储视频、图片资源,但是发现网上关于
Android
端
Amazon
S3
的资料写的都不是特别充足,于是专门写一篇给需要接入此功能的作为参考。
Amazon
官网
Amazon
S3
Andoroid SDK文档
1.准备工作
首先你得去
Amazon
平台注册一个账号传送门
注册账号以后在你的电脑上安装CLI,这个工具是为应用创建,集成和管理
AWS
云服务。
Amplify
Android
库是
AWS
首选的机制,用于与
Android
设备中的
AWS
服务进行交互。
该库提供了执行不同类别的云操作的高级界面。 每个类别都可以由您在安装过程中配置的插件来满足。
我们提供的默认插件旨在促进与
Amazon
Web Services(
AWS
)的交互。 但是,Amplify Framework设计为可扩展到任何其他后端或服务。
要熟悉Amplify,请我们的。
AWS
提供商
构建块以创建身份验证体验
管理公共,受保护的私有存储桶中的内容
AppSync
共享和分布式数据的编程模型,具有简单的在线/离线同步
AppSync
适用于
Android
的
AWS
开发工具包
对于新项目,我们建议使用与
AWS
进行交互。
适用于
Android
的
AWS
开发工具包是用于与
AWS
后端服务直接交互的低级库的集合。 对于Amplify框架未涵盖的用例,您可以将这些客户端直接集成到您的
Android
应用中。
可以通过.aar文件直接嵌入适用于
Android
的
AWS
开发工具包,也可以将其集成到
Android
项目的Gradle文件中,然后从Maven Central存储库中下载该工具包。
从Maven
我们建议从Maven获得依赖关系。 为此,请将依赖项添加到应用程序的(模块级) build.gradle的“ dependencie
我们的安卓容器需要使用
s3
来进行一些文件的
上传
和下载,因为
s3
cmd 是 Python 写的,
Android
系统中缺少linux系统中的这些依赖库,所以想运行
s3
cmd,估计是不行的,如果需要使用静态编译的
s3
客户端程序,随手在 github 上搜了一个
s3
-cli,这个项目是用 Go 写的,所以只要在本地编译的
时
候加上 static 就可以了。
将原来项目点 Makefile 修改一下,在本地编译。
SRC=*.go
s3
-cli: $(SRC)
CGO_ENABLED=0 GOOS=
Amazon
S3
android
sdk接入
前段
时
间接了iOS的
Amazon
S3
,用于
上传
及访问大文件和图片。过程比较坎坷,
Android
总的来说顺利很多,不过也碰到一些问题,在此记录一下
官方的示例代码
示例代码挺好的,不过不是太符合我的要求,我们服务端给的
AWS
凭证是动态的,每2小
时
更新一次。看官方的教程好像是写死在配置里的。
而且我也没找到符合我需求的示例代码。
集成方式和官网描述一样,不嫌我废话的话,我就贴一下吧。
dependencies {
def
aws
_version = "2