Android 亚马逊S3上传文件详细记录-终极大法

看了很多篇亚马逊s3上传文件的文章,发现大多写的都不是很详细,不能正常运行的,很苦恼;于是就有了这次记录,让你不走弯路。

1.首先需要让运维申请账号和秘钥创建bucket,所有的上传的文件都在bucket这个文件下

bucket 下面可以创建多个文件,区分不同的功能:

日志、图片等

2.初始化上传凭证

AWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);

3.初始化S3 Client

setAccelerateModeEnabled 这个参数是设置bucket是否加速,如果运维没有开启加速一定要设置false,不然会报错

   S3ClientOptions clientOptions = S3ClientOptions.builder().setAccelerateModeEnabled(false).build();
AmazonS3Client uploadClient = new AmazonS3Client(awsCreds);
uploadClient.setS3ClientOptions(clientOptions);

4.获取上传管理类TransferUtility

transferUtility = TransferUtility.builder().s3Client(uploadClient).context(context).build();

5.上传文件file

关于:transferUtility.upload(bucketName, getFileKey(), uploadFiles)
bucketName:bucket运维在s3后台创建的提供
getFileKey():在s3后台的文件名称,比如 log/202001/test.zip
uploadFiles:上传的文件

public TransferObserver upload(String bucket, String key, File file)

上传文件
TransferObserver transferObserver = transferUtility.upload(bucketName, getFileKey(), uploadFiles);
transferObserver.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if (uploadMonitor != null) {
if (state == TransferState.COMPLETED) {
uploadMonitor.onSuccess("file path == " + getSignUrl() + " ");
} else if (state == TransferState.FAILED) {
uploadMonitor.onFail("");
} else if (state == TransferState.CANCELED) {
uploadMonitor.onFail("取消了");
}
}
uploadId = -1;
}

@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
DTLog.d("UploadManager", "bytesCurrent" + bytesCurrent + " bytesTotal " + bytesTotal);
}

@Override
public void onError(int id, Exception ex) {
uploadMonitor.onFail("exception " + ex.toString());
uploadId = -1;
}
});

6.获取上传后的临时下载地址

具体公开的下载地址 还需要运维进行映射后提供

  GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
bucketName, uploadKey);
URL url = uploadClient.generatePresignedUrl(urlRequest);
return url.toString();

7.上传gradle的配置

   api 'com.amazonaws:aws-android-sdk-core:2.6.19'
api 'com.amazonaws:aws-android-sdk-s3:2.6.19'
api 'com.amazonaws:aws-android-sdk-ddb:2.6.19'

另外需要添加网络权限

需要更多帮助请发消息

图片

阅读原文

简介:一个有10多年经验开发的android、java、前端等语言的老程序员,在这里一起聊聊技术,一起聊聊生活、一起聊聊中年危机的生存之道,一起进步一起加油,感兴趣的欢迎订阅;不定时的更新。欢迎关注微信公众号:Android开发编程
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“Android开发编程”,分享链接:https://www.zyxiao.com/p/290149    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部