步骤一、AWS S3云端配置
1.首先创建AWS账号
2.创建访问密钥
登录进去点击右上角自己的账户名,然后依次选择:安全凭证-》访问密钥-》创建访问密钥-》已完成。
注意:复制创建的访问密钥(access key)和秘密访问密钥 (secret access key),一定要复制这个秘密访问密钥,点击“已完成”之后就看不到这个秘密访问密钥了。
3.使用S3创建存储桶
找到S3服务:Amazon S3-》存储桶-》创建存储桶
注意:1.创建桶的区域,是可以更改的,有时候有的区域网络不好,可以多尝试创建不同区域的桶测试;2.启用ACL; 3.不选择“阻止所有公开访问”
二、JAVA本地开发
开发工具:IDEA
软件开发工具包: jdk 1.8
项目管理和构建自动化工具: Maven
1.创建项目并在pom文件中添加AWS 2.x 的相关依赖。注意:此处是AWS SDK for Java, version 2
!--引入AWS 2.x 的sdk-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.16.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>dynamodb</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.28</version>
</dependency>
</dependencies>
2.编写代码,测试对存储桶进行文件上传下载遍历测试
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.core.ResponseInputStream;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class AWScrudtest {
private static final String accessKeyId = "你的访问密钥";
private static final String secretAccessKey = "你的访问秘密密钥";
private static final String region = "你创建的桶的所在区域"; // 根据实际情况设置
private static final String bucketName = "你的桶的名字";
private static S3Client s3Client;
// 设置认证信息
static {
AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKeyId, secretAccessKey);
s3Client = S3Client.builder()
.region(Region.of(region)) // 根据实际情况设置 region
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.build();
}
/**
* 上传文件
*
* @param bucketName
* @param keyName
* @param file
*/
public static void uploadObject(String bucketName, String keyName, File file) {
try {
s3Client.putObject(PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName) //文件在存储桶中的名字
.build(), RequestBody.fromFile(file));
System.out.println("Object '" + keyName + "' uploaded to bucket '" + bucketName + "' successfully.");
} catch (S3Exception e) {
System.err.println("Error uploading object: " + e.getMessage());
}
}
// 遍历存储桶中的对象
public static void traverseBucket(String bucketName) {
try {
// 构建请求对象
ListObjectsV2Request request = ListObjectsV2Request.builder()
.bucket(bucketName)
.build();
ListObjectsV2Response response;
do {
// 获取存储桶中的对象
response = s3Client.listObjectsV2(request);
// 遍历对象
for (S3Object s3Object : response.contents()) {
System.out.println("Object Key: " + s3Object.key() + " | Size: " + s3Object.size());
}
// 如果响应中有更多的对象,获取下一个页面
request = request.toBuilder()
.continuationToken(response.nextContinuationToken())
.build();
} while (response.isTruncated()); // 处理分页
} catch (Exception e) {
System.err.println("Error traversing bucket: " + e.getMessage());
}
}
//下载桶中的对象
public static void downloadObject(String bucketName, String keyName, String downloadFilePath) {
try {
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.build();
ResponseInputStream<?> responseInputStream = s3Client.getObject(getObjectRequest);
FileOutputStream fileOutputStream = new FileOutputStream(downloadFilePath);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = responseInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
System.out.println("Object '" + keyName + "' downloaded from bucket '" + bucketName + "' to '" + downloadFilePath + "' successfully.");
fileOutputStream.close();
responseInputStream.close();
} catch (IOException e) {
System.err.println("Error downloading object: " + e.getMessage());
} catch (S3Exception e) {
System.err.println("Error downloading object: " + e.getMessage());
}
}
//删除桶中的对象
public static void deleteObject(String bucketName, String keyName) {
try {
s3Client.deleteObject(DeleteObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.build());
System.out.println("Object '" + keyName + "' deleted from bucket '" + bucketName + "' successfully.");
} catch (S3Exception e) {
System.err.println("Error deleting object: " + e.getMessage());
}
}
public static void main(String[] args) {
uploadObject(bucketName,"test01",new File("D:\\人.png"));
traverseBucket(bucketName);
downloadObject(bucketName, "test01", "D:\\人1.png");
deleteObject(bucketName, "test01");
}
}
参考:
AWS SDK开发官方文档:将此服务与 AWS SDK 结合使用 - Amazon Simple Storage Service