当今的开拓基本已经基于云开拓了,遥想当年自己也曾扛过交流机、抬过做事器和防火墙。读书人一声长叹,时期变革弹指一挥间。好吧,过去心不可得。
说到云上存储,当属阿里云的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
实操:
下载:https://github.com/awsdocs/aws-doc-sdk-examples.git以java为例,通过api上传图片到S3测试,路径:aws-doc-sdk-examples\java\example_code\s3类: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/