欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 如何通过Java程序访问S3

如何通过Java程序访问S3

2025/4/18 21:57:58 来源:https://blog.csdn.net/qq_52645134/article/details/140819693  浏览:    关键词:如何通过Java程序访问S3

目录

配置依赖:

编写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),使用提供的accessKeyIdsecretAccessKey
  • 然后使用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()方法获取对象内容的输入流,并将其写入到本地文件中。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词