当前位置: 首页 > news >正文

aws服务--S3介绍使用代码集成

一、介绍

1、简介

Amazon S3 是 Amazon Web Services 提供的一种对象存储服务(Object Storage),用于在云中存储和检索任意数量的数据。它以高可用性、高扩展性和高持久性著称,非常适合用来存储网站资源、数据备份、日志文件、大数据、机器学习输入输出等。

2、主要特性
特性描述
高持久性99.999999999%(11个9)的持久性
高可用性多 AZ 存储,容错能力强
权限控制支持 IAM、ACL、Bucket Policy、S3 Access Points
版本控制支持保存对象的多个版本
生命周期管理可设置自动转储到低频/归档存储,或自动删除
静态网站托管可以直接托管前端网页应用
数据加密支持 SSE(服务器端加密)和 CSE(客户端加密)
事件通知可配置对象上传/删除等事件通知,例如触发 Lambda 函数
3、常见使用场景
  • 网站静态资源托管(HTML、CSS、JS、图片等)

  • 应用日志和备份存储

  • 数据湖和大数据分析

  • 机器学习训练数据输入/输出

  • 软件包分发、媒体存储与流媒体

4、存储类别
类别说明
S3 Standard默认,高频访问
S3 Intelligent-Tiering自动调整为最优存储层
S3 Standard-IA不常访问但需要快速读取
S3 One Zone-IA单 AZ 存储,不常访问,便宜
S3 Glacier归档存储,取回需数分钟到小时
S3 Glacier Deep Archive最便宜的长期存储,取回时间更长
5、通过命令行上次文件
# 上传文件到 S3
aws s3 cp myfile.txt s3://my-bucket-name/myfile.txt

二、核心概念

1. Bucket(存储桶)
  • 所有的对象都保存在一个 bucket 里。

  • 每个 bucket 名称在全球必须唯一。

  • 可以为 bucket 设置权限、生命周期、版本控制等。

2. Object(对象)
  • 存储单元,每个对象包括:

    • 数据本体

    • Key(对象的唯一标识符)

    • Metadata(元数据)

  • 最大支持单个对象大小为 5TB(上传超过 5GB 需要用分段上传)。

3. Key(键)
  • 对象在 bucket 中的唯一标识,相当于路径,例如:images/photo.jpg

三、在aws平台操作s3

1、创建 Bucket

登录 AWS 控制台 → 进入 S3 服务。点击「创建 bucket」

(1)输入 bucket 名称(全球唯一)和区域

这里名称重复了,我后来改成dev-test-ab。 

根据需要设置公开权限、版本控制、加密等:

点击「创建 bucket」

2、上传文件

进入你创建的 bucket,点击上传→ 拖拽或选择文件,设置权限(如是否公开访问),点击上传

跳转: 

四、aws cli命令操作s3

1、先授权aws

首先要登录到aws,否则会报错

参考前面的博客,使用sso登录:

(1)在C:\Users\wtyy\.aws目录下创建一个config文件

(2)aws cli使用sso命令登录

 我的文档在downloads目录下,为了方便,我在downloads目录下打开cmd

C:\Users\wtyy\Downloads>aws sso login --profile my-test

回车后自动跳转到浏览器的sso登录页面,使用企业账号授权登录:

查看在C:\Users\wtyy\.aws\sso\cache目录下生成了凭证文件:

现在就可以使用aws服务了(包括这里的s3)。

 2、上传文件
aws s3 cp ./test.txt s3://my-unique-bucket-name/test.txt

  如我的:注意后面加上了profile,否则可能还报上面的错fatal error: Unable to locate credentials

aws s3 cp ./text_2.txt s3://dev-test-ab/text_2.txt --profile my-test

  回车后等待上传,成功后打印

从aws控制台看也上传成功了

 3、下载文件
aws s3 cp s3://my-unique-bucket-name/test.txt ./test_downloaded.txt

如我的:

aws s3 cp s3://dev-test-ab/text_1.txt ./test_downloaded.txt  --profile my-test

下载成功:

 

4、列出文件
aws s3 ls s3://my-unique-bucket-name/

如我的:

aws s3 ls s3://dev-test-ab/  --profile my-test

输出:

五、java代码操作s3

在上面的基础上(登录后生成的凭证还有效),通过springboot来操作s3

1、pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>s3-demo</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><aws.sdk.version>2.20.4</aws.sdk.version> <!-- 请使用最新的 AWS SDK 版本 --><jackson.version>2.16.2</jackson.version></properties><repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository></repositories><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>software.amazon.awssdk</groupId><artifactId>sts</artifactId><version>${aws.sdk.version}</version></dependency><dependency><groupId>software.amazon.awssdk</groupId><artifactId>ssooidc</artifactId><version>${aws.sdk.version}</version></dependency><!-- AWS SDK Core, 必须添加 --><dependency><groupId>software.amazon.awssdk</groupId><artifactId>aws-core</artifactId><version>${aws.sdk.version}</version></dependency><!-- AWS SDK for SSO (如果需要)--><dependency><groupId>software.amazon.awssdk</groupId><artifactId>sso</artifactId><version>${aws.sdk.version}</version></dependency><!-- Logging dependencies for AWS SDK --><dependency><groupId>software.amazon.awssdk</groupId><artifactId>apache-client</artifactId><version>${aws.sdk.version}</version></dependency><dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>${aws.sdk.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency></dependencies>
</project>
2、config
package com.demo.s3.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;@Configuration
public class S3Config {@Beanpublic S3Client s3Client() {AwsCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create("my-test");return S3Client.builder().region(Region.US_EAST_1) // 设置你的 Region//.credentialsProvider(DefaultCredentialsProvider.create()) // 自动读取 ~/.aws/credentials 或 SSO 登录.credentialsProvider(credentialsProvider).build();}
}
3、service
package com.demo.s3.service;import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;import java.nio.file.Paths;@Service
@RequiredArgsConstructor
public class S3Service {private final S3Client s3Client;public void uploadFile(String bucketName, String keyName, String filePath) {PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(bucketName).key(keyName).build();s3Client.putObject(putObjectRequest, RequestBody.fromFile(Paths.get(filePath)));System.out.println("✅ 文件上传成功!");}
}
4、单测
package com.demo.s3;import com.demo.s3.service.S3Service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@SpringBootTest(classes = {S3Application.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class MyTest {@AutowiredS3Service s3Service;@Testpublic void  testDelete() {s3Service.uploadFile("dev-test-ab", "test_java.txt", "C:\\Users\\wtyy\\Downloads\\test.txt");}
}

验证上传成功:

相关文章:

  • 【Vue】修饰符
  • 前端笔记-AJAX
  • 【自然语言处理与大模型】模型压缩技术之蒸馏
  • 秦智杂志秦智杂志社秦智编辑部2025年第3期目录
  • 合同管理Contract Management
  • CH585单片机的LCD外设怎么驱动段式LCD
  • leetcode149.直线上最多的点数
  • YOLOv5改进CBAM【保姆级教程】
  • OpenCV 图形API(45)颜色空间转换-----将图像从 BGR 色彩空间转换为 YUV 色彩空间函数BGR2YUV()
  • 【教程】Digispark实现串口通信
  • 深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理
  • [免费]SpringBoot+Vue博物馆(预约)管理系统【论文+源码+SQL脚本】
  • leetcode 516. Longest Palindromic Subsequence
  • Qt 概述
  • 【Linux】轻量级命令解释器minishell
  • 在线查看网站免费工具 wps, dps, et, ett, wpt 文件格式
  • Java 性能优化:从硬件到软件的全方位思考
  • JavaScript性能优化实战(1):性能优化基础与性能分析工具
  • KRaft面试思路引导
  • 【JavaEE】计算机的工作原理
  • 世界读书日丨“好书最美”,国家图书馆举办读书日特别活动
  • 中共中央、国务院印发《关于实施自由贸易试验区提升战略的意见》
  • 深化应用型人才培养,这所高校聘任行业企业专家深度参与专业设置
  • 6万余采购商消博会上“扫货”,全球好物“购物车”满载而归
  • 一代油画家的“色彩之诗”:周碧初捐赠艺术展上海举行
  • 擘画开放新篇 共筑合作之桥——中国银行上海市分行全力护航第八届进博会筹备工作