添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何使用AWS SDK for Java V2从Amazon S3桶中读取一个文件

1 人关注

我能够使用AmazonS3Client读取文件,但现在我试图使用package software.amazon.awssdk.services.s3.S3Client读取文件。我没有找到将文件名传递给GetObjectRequest constructoe的选项,不像com.amazonaws.service.s3包。这里是我的示例代码。

import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;
import software.amazon.awssdk.services.s3.model.S3Object;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
main(String[] args){
String bucketName = "some-name-s3";
Region region = Region.US_EAST_1;
            S3Client s3client = S3Client
                    .builder()
                    .region(region)
                    .build();
ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucketName).build();
ListObjectsV2Response listObjectsV2 = s3client.listObjectsV2(listObjectsV2Request);
            List<S3Object> s3Objects = listObjectsV2.contents();

现在,如何从s3Objects读取每个文件并处理流。

amazon-web-services
amazon-s3
user2692291
user2692291
发布于 2021-09-23
1 个回答
smac2020
smac2020
发布于 2021-09-23
已采纳
0 人赞同

你在使用AWS SDK for Java V2从Amazon S3桶中读取对象时,使用了错误的逻辑。你正在调用列表桶。你可以调用 listObjectsV2 获得每个对象的元数据。例如,你可以调用 S3Object的 key() 方法来获得密钥名称。

现在要从Amazon S3桶中读取一个对象,你需要桶名和键名,然后调用 getObjectAsBytes ,如这个Java逻辑所示,它显示了如何读取一个PDF文档并将其写入本地路径中。

package com.example.s3;
import software.amazon.awssdk.core.ResponseBytes;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 * To run this AWS code example, ensure that you have setup your development environment, including your AWS credentials.
 * For information, see this documentation topic:
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
public class GetObjectData {
    public static void main(String[] args) {
     final String USAGE = "\n" +
                "Usage:\n" +
                "    GetObjectData <bucketName> <keyName> <path>\n\n" +
                "Where:\n" +
                "    bucketName - the Amazon S3 bucket name. \n\n"+
                "    keyName - the key name. \n\n"+
                "    path - the path where the file is written to. \n\n";
        if (args.length != 3) {
            System.out.println(USAGE);
            System.exit(1);
        String bucketName = "myBucket";
        String keyName = "book.pdf";
        String path = "C:/AWS/book.pdf";
        Region region = Region.US_EAST_1;
        S3Client s3 = S3Client.builder()
                .region(region)
                .build();
        getObjectBytes(s3,bucketName,keyName, path);
        s3.close();
    public static void getObjectBytes (S3Client s3, String bucketName, String keyName, String path ) {
        try {
            GetObjectRequest objectRequest = GetObjectRequest
                    .builder()
                    .key(keyName)
                    .bucket(bucketName)
                    .build();
            ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(objectRequest);
            byte[] data = objectBytes.asByteArray();
            // Write the data to a local file
            File myFile = new File(path );
            OutputStream os = new FileOutputStream(myFile);
            os.write(data);
            System.out.println("Successfully obtained bytes from an S3 object");
            os.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (S3Exception e) {
          System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);