Amazon S3对象储存

  • 一、前言
  • 二、Amazon S3 简介
  • 三、为何选择Amazon S3
  • 四、部署环境
  • 五、存储桶的创建与删除
    • 1.命名规则
    • 2.控制台创建和删除
    • 3.api创建和删除
  • 六、上传图片
    • 1.控制台上传
    • 2.api上传与删除
  • 七、加载图片
    • 1.url加载图片
    • 2.获取图片对象进行下载
  • 八、踩坑经历
    • 1.两种api
    • 2.两个域名
  • 九、总结

一、前言

亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量。

https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el

在我们日常开发中,图片是非常常用的一种文件,一般来讲是采用url的方式进行加载的,那就有个问题了,离服务器的远近导致了延迟的问题,离服务器远的用户体验相对而言就不是很好了,那有没有办法可以解决这个问题,接下来介绍的**Amazon S3(Simple Storage Service)**对象存储就是解决这个问题的,正文即将开始。

二、Amazon S3 简介

Amazon S3 是一种对象存储服务,可将数据作为对象存储在存储桶中。 对象是一个可以存储任何允许的文件格式的最小单位,例如txt,png,apk等等。存储桶是对象的容器。要将数据存储在 Amazon S3 中,首先得创建一个存储桶并指定存储桶名称和 AWS 区域(这个区域最好选择生产环境的临近结点)。然后,数据将作为 Amazon S3 中的对象上传到该存储桶。 每个对象都有一个键(可以包括路径名,Amazon S3会自动完成转换),它是桶内对象的唯一标识符(免费版本最多支持300个对象)。S3 提供个性化的设置需求。 例如,可以使用 S3 的版本控制将一个对象的多个版本保存在同一个存储桶中,这样可以恢复意外删除或者覆盖的对象,版本控制功能需要开启相关的设置,默认不开启,比较消耗存储空间。存储桶中的对象默认是私有的,只有在开启外界访问权限时才能访问。 可以使用存储桶策略、AWS Identity and Access Management (IAM) 策略、访问控制列表 (ACL)S3 访问点等来管理访问。

三、为何选择Amazon S3

Amazon S3全称Amazon Simple Storage Service 是AWS(Amazon Web Service)中的产品之一,主要提供对象存储服务,那么为何选择Amazon S3 呢?基于以下几种原因考虑

  • 高可靠的对象设计持久性

    对象设计持久性达到了19个九,即99.999999999%,即10000年只会发生一次对象丢失

  • 灵活的对象储存方案

    使用S3 Intelligent-Tiering 作为默认存储类,基于访问频率,可以自动调整对象存储的方式,降低对象储存成本

  • 数据安全有保证

    提供服务端加密,客户端加密以及默认的加密方式,默认情况下只能自己访问存储桶中的对象

  • 支持批量处理和跨区域复制

    不夸张的说可以通过s3同时操作亿万个对象,同时支持将对象复制到其他区域

四、部署环境

  • 依赖引入

    这里以gradle的部署为例

    implementation "software.amazon.awssdk:s3:2.17.172"
    

    maven也差不多,这里就不演示了

  • 创建客户端

    这个是s3对象存储中必不可少的部分,这里简单配置一下,后面有需求可以随时添加和更改

    fun getS3client(): S3Client {//选择结点val region = Region.AP_NORTHEAST_1//登录凭据val provider: AwsCredentialsProvider = StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId,secretAccessKey))return S3Client.builder().credentialsProvider(provider).region(region).build()
    }
    

    accessKeyIdsecretAccessKey可以进入个人设置里面的安全设置进行创建,可同时创建多个,但有一点需要注意,控制台不保存密钥,需要自己进行保存,会让你下载一个csv文件保存自己的密钥,当然其实也没关系,忘记了再创建一个,忘记的那个密钥要记得删除避免安全隐患

五、存储桶的创建与删除

1.命名规则

至少3个字符,至多63个字符,必须以字母或者数字作为结尾和开头,特殊字符仅支持

. 和 -

同时以下前缀和后缀不支持

前缀:xn--
后缀:-s3alias

最后要强调的一点是桶的名称在全部AWS账户创建的桶中唯一的,即全球只会有一个!!

2.控制台创建和删除

  • 打开s3官网

  • 创建一个bucket

    这里有一些选项需要填写,应该不是很困难,有一点需要注意选择区域的时候最好选最近的节点进行桶的部署,推荐Tokyo结点,这里可能不同的地区会有一点限制,例如选择不了香港的结点,所以目前国内的访问还是比较慢的。

  • bucket setting

    这里主要功能是图片访问,为了方便测试,修改成任何人都能访问,以下选项全部取消勾选,默认是全部勾选(安全保护考虑)

  • 删除桶

    点击delete即可删除

console 的操作都很简单,接下来介绍api的创建

3.api创建和删除

这个利用最新的api,几行代码就可以搞定

fun createBucket(s3Client: S3Client, bucketName: String) {val bucketRequest = CreateBucketRequest.builder().bucket(bucketName).build()s3Client.createBucket(bucketRequest)
}

这里利用创建桶的api构造一个request,传入桶名和客户端就可以了,这里默认屏蔽所有外来访问,也可以设置相关的acls进行开放,有兴趣可以查看官方demo了解一下

下面展示一下删除桶的代码,也是相当的简单

fun deleteBucket(s3Client: S3Client,bucketName: String){val deleteRequest = DeleteBucketRequest.builder().bucket(bucketName).build()s3Client.deleteBucket(deleteRequest)
}

六、上传图片

1.控制台上传

这个比较简单,点击upload即可上传文件

2.api上传与删除

api上传也很简单,简单配置一下参数就可以了

fun uploadObject(s3Client: S3Client,bucketName: String){//上传对象的请求//这里需要自己设置上传桶的名称和图片的路径//img/hello.jpg即上传至img文件夹下的hello.jpg,若没有img文件夹则自动创建一个val putObjectRequest = PutObjectRequest.builder().bucket(bucketName).key("img/hello.jpg").build()//本地的文件val file = File("C:\\Users\\user\\Desktop\\local.jpg")//启用客户端开始上传s3Client.putObject(putObjectRequest, RequestBody.fromFile(file))
}

api的删除也很容易,参数和上传差不多

fun deleteObject(s3Client: S3Client,bucketName: String,keyName:String){//这里的keyName即创建时的key,相当于对象在桶中的相对位置val deletedObjectRequest = DeleteObjectRequest.builder().bucket(bucketName).key(keyName).build()s3Client.deleteObject(deletedObjectRequest)
}

七、加载图片

1.url加载图片

这个需要在图片对象那里开启public read的权限,开启之后就可以直接通过url进行访问图片了

这里的object url即对外开放的url

2.获取图片对象进行下载

这里用代码进行下载,当然如果是桶的owner,不需要进行权限处理即可访问

fun getObject(s3Client: S3Client,bucketName: String,keyName:String){val getObjectRequest = GetObjectRequest.builder().bucket(bucketName).key(keyName).build()//参数即本地存放路径val file = File("C:\\Users\\user\\Desktop\\get.jpg")s3Client.getObject(getObjectRequest,file.toPath())
}

八、踩坑经历

1.两种api

应该时amazon aws为了统一化风格,重写了java方面的api,这就导致了文档和网上的各种操作用的依赖不同,刚开始就是一头雾水,官网推荐使用新版的api,然而很多介绍性的文档还没更新是旧的api,有些又是新的api,刚开始的学习阶段很头疼。

//这里给出两种最新版本的依赖
//一个以.com开头,一个以software开头
implementation ("com.amazonaws:aws-java-sdk-s3:1.12.196")
implementation ("software.amazon.awssdk:s3:2.17.172")

不过这里还是推荐使用新版的api,风格形式真的相当简洁,会一种操作其他的也是一样

//以某某操作的request为参数
//然后通过链式调用完成request参数的配置
//最后调用s3Client完成request的具体操作
//下面这个删除仅仅只用了两行代码就完成了删除操作
val deleteRequest = DeleteBucketRequest.builder().bucket(bucketName).build()
s3Client.deleteBucket(deleteRequest)

2.两个域名

刚开始不知道原来amazon在国内也有网站,然后一直用的国外的网站,访问速度感人

  • aws中国站
  • aws官网

九、总结

亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量。

https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el

部署和实战的过程有些曲折,也有收获,部署最大的困难是文档的各异以及国内访问的速度的限制,然后最让人意外和欣慰的就是最后使用的api相当简洁和易用,感谢这套统一风格的api,开发者友好型,下面给出主要的参考资料方便读者进一步探索更多高级的功能,类似加密处理,访问组控制,自带的tag进行查询等等,这里由于篇幅所限就不一一介绍了。

github参考样例

入门参考

Amazon S3对象储存(以图片为例)相关推荐

  1. amazon s3_在Amazon S3上托管静态网站

    amazon s3 Static website hosting on Amazon S3 is one of the very popular use cases of Amazon S3. It ...

  2. Amazon Simple Storage Service(Amazon S3)

    Amazon S3是高可扩展性.持久性和可用的分布式对象存储,它主要是为重要的任务和主要的数据存储,而且它还有一个易于使用的web服务接口.在传统的内部应用程序中,这种类型的数据一般都会保存在SAN或 ...

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

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

  4. aws api gateway 创建一个REST API作为Amazon S3代理

    你可能想把样本API导入为Amazon S3的代理,如样本API作为Amazon S3代理的OpenAPI定义所示.关于如何使用OpenAPI定义导入API的说明,请参阅使用OpenAPI配置REST ...

  5. Amazon S3下载图片

    Amazon S3 Amazon S3,全名为亚马逊简易存储服务.类似于阿里云的oss,或百度云等网盘服务.即将文件存储在云端服务器中,文件会有对应的url.一般用于大型公司或者跨国业务. 官网(ht ...

  6. Amazon S3 Storage(亚马逊的对象存储)

    目录 概述 设计 对象存储 访问控制 主机托管 日志 实用工具 亚马逊S3存储级别 S3 API和与之竞争的服务 发展历史 概述 亚马逊S3,全称亚马逊简易存储服务(Amazon Simple Sto ...

  7. 使用电信云时做对象储存时的异常信息:com.amazonaws.services.s3.model.AmazonS3Exception

    项目中用到了电信云面向对象存储(OOS),代码是从其他团队开发的项目中直接copy的,测试都没问题,但是到我这个项目中以后就报错问题找了好久,配置其他的都排除了,突然有人说是不是依赖jar包的问题,换 ...

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

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

  9. Amazon S3简介

    目录 文献参考: 存储桶 对象 键 区域 S3数据一致性模型 存储类别 存储桶策略 AWS Identity and Access Management 操作 创建请求 AWS 账户访问密钥 IAM ...

  10. 【云计算的1024种玩法】轻松将其他云的对象储存迁移至阿里云OSS

    前言 当使用了像 OSS.S3 这样的开放对象储存的 PaaS 产品后,一面上体验到了网站核心同附件库分离的安全性.高性能以及免维护的便利性,一面上却又怕在一个厂家的对象储存上扎根了就无法迁移,会被厂 ...

最新文章

  1. This is probably not a problem with npm. There is likely additional logging output above
  2. python对象编程例子-python(十二)面向对象编程、类
  3. Codeforces 1025D(区间dp)
  4. 解决问题ImportError: HDFStore requires PyTables, quot;No module named 'tables'quot; problem importing
  5. 让PIP源使用国内镜像
  6. 获取和设置c# 应用程序目录
  7. Centos/RHEL上查看主板型号
  8. IIS中“使用 XSL 样式表无法查看 XML 输入”问题的解决
  9. 浅谈webpack打包原理
  10. flyme7 android彩蛋,魅族 15 系列开启预约,Flyme7 或是发布会彩蛋
  11. devops项目经理_DevOps:如何避免交接导致项目死亡
  12. 【第一篇】Volley的使用之json请求
  13. (二十二)访问者模式详解(伪动态双分派)
  14. AutoML之锦标赛选择
  15. 总会用到的系列4:关键时刻能救家庭的保险
  16. VMware Workstation Pro 虚拟机启动失败 cpu虚拟化开启
  17. 不适合创业的10种人
  18. 通过cocos裁切图片,将大图分为小图
  19. pycharm 格式化html文件
  20. 思维导图怎么画:这款免费思维导图软件推荐给你

热门文章

  1. 新浪vip邮箱 服务器,新浪手机邮箱
  2. 安装andriod studio的过程中遇到的问题
  3. Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程
  4. 河南对口升学计算机考纲,2018年河南省对口升学考纲.
  5. 织梦DedeCMS网站源代码分析详解
  6. 深眸分享——一文看懂倍频器的原理及其应用
  7. ndows 资源管理器,windows资源管理器已停止工作怎么解决
  8. 阿里云服务器mysql数据库读写权限设置_MySQL权限管理
  9. 解除IIS文件下载限制
  10. 《战狼Ⅱ》豆瓣十二万影评浅析