目录
配置依赖:
编写java代码:
代码分析
静态初始化块
列出存储桶:
列出桶中的对象:
上传对象到桶中:
删除桶中的对象:
下载桶中的对象:
配置依赖:
使用 Maven 进行项目管理,在 pom.xml 文件中添加以下依赖:
<dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>2.20.52</version></dependency>
编写java代码:
基于AWS S3的Java示例,展示了如何使用AWS SDK for Java v2来进行对象存储服务的各种操作,包括列出存储桶、列出存储桶中的对象、上传对象、删除对象以及下载对象。
import software.amazon.awssdk.auth.credentials.*;
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.model.*;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.S3Object;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.util.List;public class Main {private static final String accessKeyId = "your-accessKeyId";private static final String secretAccessKey = "your-secretAccessKey";private static final String endpoint = "your-endpoint";private static final String region = "ap-southeast-1"; // 根据实际情况设置private static final String bucketName = "your-bucketName";private static S3Client s3Client;// 设置认证信息static {AwsCredentials credentials = AwsBasicCredentials.create(accessKeyId, secretAccessKey);s3Client = S3Client.builder().forcePathStyle(true).endpointOverride(URI.create(endpoint)).region(Region.of(region)) // 根据实际情况设置 region.credentialsProvider(StaticCredentialsProvider.create(credentials)).build();}// 列出存储桶public static void listBuckets() {try {// 列出存储桶ListBucketsResponse listBucketsResponse = s3Client.listBuckets();listBucketsResponse.buckets().forEach(bucket -> System.out.println("Bucket: " + bucket.name()));} catch (S3Exception e) {throw new RuntimeException(e);}}// 列出桶对象public static void listObjects(String bucketName) {try {ListObjectsV2Response listObjectsResponse = s3Client.listObjectsV2(ListObjectsV2Request.builder().bucket(bucketName).build());List<S3Object> objects = listObjectsResponse.contents();for (S3Object object : objects) {System.out.println("Object Key: " + object.key());}} catch (S3Exception e) {System.err.println("Error listing objects: " + e.getMessage());}}//上传对象到桶中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 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 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 | S3Exception e) {System.err.println("Error downloading object: " + e.getMessage());}}
代码分析
静态初始化块
static {AwsCredentials credentials = AwsBasicCredentials.create(accessKeyId, secretAccessKey);s3Client = S3Client.builder().forcePathStyle(true).endpointOverride(URI.create(endpoint)).region(Region.of(region)).credentialsProvider(StaticCredentialsProvider.create(credentials)).build();
}
- 在静态初始化块中,首先创建了AWS的基本认证凭据(
AwsBasicCredentials
),使用提供的accessKeyId
和secretAccessKey
。 - 然后使用
S3Client.builder()
创建了一个S3客户端对象(s3Client
),设置了强制路径样式、端点覆盖、区域和凭据提供者。
列出存储桶:
public static void listBuckets() {try {ListBucketsResponse listBucketsResponse = s3Client.listBuckets();listBucketsResponse.buckets().forEach(bucket -> System.out.println("Bucket: " + bucket.name()));} catch (S3Exception e) {throw new RuntimeException(e);}
}
listBuckets()
方法通过调用s3Client.listBuckets()
列出所有的存储桶。- 对每个存储桶,输出其名称。
列出桶中的对象:
public static void listObjects(String bucketName) {try {ListObjectsV2Response listObjectsResponse = s3Client.listObjectsV2(ListObjectsV2Request.builder().bucket(bucketName).build());List<S3Object> objects = listObjectsResponse.contents();for (S3Object object : objects) {System.out.println("Object Key: " + object.key());}} catch (S3Exception e) {System.err.println("Error listing objects: " + e.getMessage());}
}
listObjects(String bucketName)
方法列出指定存储桶(bucketName
)中的所有对象。- 使用
listObjectsV2()
方法请求对象列表,并迭代每个对象输出其键(key
)。
上传对象到桶中:
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());}
}
uploadObject(String bucketName, String keyName, File file)
方法将指定的文件(file
)上传到指定的存储桶(bucketName
)中。- 使用
putObject()
方法,指定存储桶名称、对象键(keyName
)和文件内容(RequestBody.fromFile(file)
).
删除桶中的对象:
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());}
}
deleteObject(String bucketName, String keyName)
方法从指定的存储桶(bucketName
)中删除指定键(keyName
)的对象。- 使用
deleteObject()
方法,指定存储桶名称和对象键(keyName
)。
下载桶中的对象:
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 | S3Exception e) {System.err.println("Error downloading object: " + e.getMessage());}
}
downloadObject(String bucketName, String keyName, String downloadFilePath)
方法从指定的存储桶(bucketName
)中下载指定键(keyName
)的对象到指定的本地文件路径(downloadFilePath
)。- 使用
getObject()
方法获取对象内容的输入流,并将其写入到本地文件中。