百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

存储_AWS的S3实践之路(aws 文件存储)

liuian 2025-06-08 22:36 3 浏览

前言

当今的开发基本已经基于云开发了,遥想当年自己也曾扛过交换机、抬过服务器和防火墙。读书人一声长叹,时代变化弹指一挥间。好吧,过去心不可得。

说到云上存储,当属阿里云的OSS和亚马逊的S3。

今天就入个S3的门,揭开它的面纱。

资料:

1、使用 AWS SDK for Java 的 Amazon S3示例

https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3.html

2、适用于 Java 的 AWS 开发工具包

https://aws.amazon.com/cn/sdk-for-java/

3、AWS SDK for Java Documentation Examples

https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/java


实操:

  1. 下载:https://github.com/awsdocs/aws-doc-sdk-examples.git
  2. 以java为例,通过api上传图片到S3测试,路径:aws-doc-sdk-examples\java\example_code\s3
  3. 类:PutObject的执行mian方法,buckent_name和file_path按实际情况填写。

4、main方法报错:Access Denied

解决:
https://aws.amazon.com/cn/premiumsupport/knowledge-center/s3-access-denied-error-kms/

4.1 打开IAM控制台,创建用户

备注:“访问秘钥ID和私有访问秘钥“要记录下来,在SDK访问S3的时候使用。


4.2 main方法依旧报错:Access Denied,何解?

看了一些资料,加bucket的策略,如下:

4.3 增加策略仍然不可以,当一个问题一直没有解决,一定忽视了某些关键问题点,

在sdk的源码中,只有资源上传的功能,但是鉴权的机制在哪?

如何控制用户访问不同的s3资源?

于是乎,查看源代码中哪些类与鉴权有关系,尝试一下App.java,报错:

Exception in thread "main" java.lang.IllegalArgumentException: profile file cannot be null

顺藤摸瓜,stack overflow帮了忙,如下:

https://stackoverflow.com/questions/41796355/aws-error-downloading-object-from-s3-profile-file-cannot-be-null

4.4 Credentials的格式如何定义

官网:
https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

[default]
aws_access_key_id={YOUR_ACCESS_KEY_ID}
aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}

[profile2]
aws_access_key_id={YOUR_ACCESS_KEY_ID}
aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}

如上格式,创建credentials文件,内容为创建用户的私钥,放在~/.aws/下即可。


5、S3上传的图片通过浏览器访问,报错如下:

5.1 增加桶策略

{
	"Version": "2012-10-17",
	"Id": "Policy1647532048639",
	"Statement": [
		{
			"Sid": "Stmt1647532038507",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::111111111:user/s3-proxy"
			},
			"Action": "s3:*",
			"Resource": "arn:aws:s3:::xx-22"
		},
		{
        "Sid": "PublicRead",
        "Effect": "Allow",
        "Principal": "*",
        "Action": ["s3:GetObject"],
        "Resource": "arn:aws:s3:::xxxx-22/*"
		}
	]
}

5.2 编辑“阻止公有访问(存储桶设置)”

重复5.1 步骤,保存成功,重新访问URL即可。


反思

在鉴权的时候,走了一些弯路,如果先大体把官网的关于sdk-for-java相关的文档看一下,会更顺一些。


参考资料:

官方S3文档:
https://aws.amazon.com/cn/premiumsupport/knowledge-center/s3-access-denied-error-kms/

相关推荐

如何使用postman做接口测试(菜鸟级攻略)

首先,什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好...

postman教程-15-Runner说明及创建业务流

经常我们要把编写好的用例进行回归测试,这时我们就可以通过Runner来选择我们要运行的测试集进行回归。Runner介绍进入Runner有两个入口,第一个就是选择一个集合,点击右三角进入,点击RUN;第...

Postman 接口测试实战教程:从入门到精通,全网最全项目详解

什么是接口?为什么需要接口?因为接口能使我们的实体或者软件内部数据能够被外部进行修改、查询。从而使得内部和外部实现数据交互,所以,需要用到接口。软件接口:右称:API(applicationprog...

HTTP Cookies知识-查看、发送、获取、返回

1简介HTTPCookies是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求里被携带并发送到服务器上。Cookie主要用于以下三个方面:会话状态管理(如用...

Jmeter和Postman测试工具的区别(postman和jmeter的优缺点)

区别一:用例组织方式不同的目录结构与组织方式代表不同工具的测试思想,学习一个测试工具应该首先了解其组织方式。Jmeter的组织方式相对比较扁平,它首先没有WorkSpace(工作空间)的概念,直接是T...

Postman接口测试之:添加Cookie伪造请求

1、获取cookie值登录某网站,通过开发者工具(或者fiddler抓包工具),获取登录成功后的请求头中的cookie值。大家肯定奇怪,明明访问首页的时候就已经生成了cookie值,为什么还登录呢?虽...

PostMan循环发送请求(postman重复请求)

我们在开发中,测试一个或者多个接口时,经常需要循环的去访问这个接口,用来测试接口的性能,使用postman可以做到这一点。不仅能循环测试一个接口,还能同时循环测试多个接口。一PostMan循环发送请求...

手把手教你搭建一个文件存储服务器minio,实现文件存储

Minio是一个开源的、自托管的对象存储服务器,它提供了类似于云存储服务的功能。你可以使用Minio搭建自己的私有云存储解决方案,或者作为公共存储服务的替代方案。安装官网:https://min.io...

存储_AWS的S3实践之路(aws 文件存储)

前言当今的开发基本已经基于云开发了,遥想当年自己也曾扛过交换机、抬过服务器和防火墙。读书人一声长叹,时代变化弹指一挥间。好吧,过去心不可得。说到云上存储,当属阿里云的OSS和亚马逊的S3。今天就入个S...

Java 编程技巧之单元测试用例编写流程

温馨提示:本文较长,同学们可收藏后再看:)前言清代杰出思想家章学诚有一句名言:“学必求其心得,业必贵其专精。”意思是:学习上一定要追求心得体会,事业上一定要贵以专注精深。做技术就是这样,一件事如果做...

快来试试这款一行代码实现多平台文件存储的工具!

大家好,我是Java陈序员。文件上传下载,是我们在开发中经常会遇到的需求!无论是本地存储、还是云存储,我们可以自己封装API来实现功能。今天,给大家介绍一款一行代码实现多平台文件存储的工具,开箱...

“全”事件触发:阿里云函数计算与事件总线产品完成全面深度集成

随着云原生技术的普及和落地,企业在构建业务系统时,往往需要依赖多个云产品和服务,产品互联、系统协同的需求越来越强。事件驱动架构将事件应用于解耦服务之间的触发和交互,能够帮助用户很好实现产品、系统之间...

2.2k star,一款业界领先的私有云+在线文档管理系统

简介kodbox可道云(原KodExplorer)是业内领先的企业私有云和在线文档管理系统,为个人网站、企业私有云部署、网络存储、在线文档管理、在线办公等提供安全可控,简便易用、可高度定制的私有云产品...

再次升级!阿里云Kubernetes日志解决方案

背景针对K8S日志采集存在的采集目标多、弹性伸缩难、运维成本大、侵入性高、采集性能低等问题,在18年2月份日志服务和容器服务团队一起发布了阿里云Kubernetes日志解决方案。1分钟内即可完成整个集...

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板-基础框架-分布式架构-开源项目-持续集成-自动化部署-系统监测-无缝升级的全方位J2EE企业级开发解...