AWS s3 V4签名算法

原创,转载请注明:http://www.jianshu.com/p/a6a02309190f

一、开篇说明:

以下思考方向,是以Android端为出发点(IOS同理)
AWS:Amazon Web Services (亚马逊云服务)
AWS s3 API文档:https://aws.amazon.com/cn/documentation/s3/



Minio :(具体的解释自行百度吧)一个基于 golang 语言开发的 AWS S3 存储协议的开源实现,并附带 web ui 界面,可以通过 Minio 搭建私人的兼容 AWS S3 协议的存储服务器。

二、需求分析

项目需求:最近公司需要搭建一个文件服务器,让移动端(Android、ios)用来存储图片等文件。这个文件服务器后台使用minio搭建的。由于minio是基于AWS S3 存储协议,所以我们移动端也需要实现相同的协议来上传。移动端,我们确定了三种可行方案(方案优劣仅是基于对APK打包大小的影响程度来确定的):

  • 方案一:基于AWS S3 存储协议自己实现文件上传(最佳方案,最后项目引入文件最小----大约100K,不影响apk大小)
  • 方案二:使用AWS SDK 实现文件上传(中间方案,需要引入项目的jar包1.5M文件略大)
  • 方案三:使用minio SDK 实现文件上传(最差方案,需要引入6M jar包)

三、代码实现

由于项目需求不同,供大家自行选择,我将这三种方案实现一一说明。

方案三:

demo下载:https://github.com/Nergal1/minio-demo

  • 1.Android端引入minio SDK jar包会和原生的发生冲突,会报一些安全错误。
    引入时,去除冲突的包,com.fasterxml.jackson.core和com.google.code.findbugs:
    dependencies {
                         compile ('io.minio:minio:3.0.4'){
                               excludegroup:'com.fasterxml.jackson.core'
                               excludegroup:'com.google.code.findbugs'
                          }
    }
  • 2.上传代码:
    /\*上传图片
    bucketName:服务端存储文件夹,必须先创建
    objectName:服务端存储文件名
    inputStream:上传文件流
    \*/
    minioClient.putObject(bucketName,objectName,inputStream,inputStream.available(),"application/octet-stream");
    提醒:别忘了开启网络权限
  • 3.简易源码流程图,数字代表行号:

    minio上传源码简易流程图

方案二:

demo下载:https://github.com/Nergal1/AWS-S3-demo

  • 1.由于AWS SDK源码中是开启Service,然后创建线程池实现异步上传、下载功能。
    清单文件要注册service:

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值