首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >software.amazon.awssdk.services.s3.model.s3exception: null与使用GetObjectRequest

software.amazon.awssdk.services.s3.model.s3exception: null与使用GetObjectRequest
EN

Stack Overflow用户
提问于 2022-10-07 10:20:42
回答 1查看 190关注 0票数 0

我正在尝试使用这段代码,但我感到很不爽

代码语言:javascript
运行
复制
var awsBasicCredentials  =  Packages.software.amazon.awssdk.auth.credentials.AwsBasicCredentials.create("ackey","secretkey");
var credentials =  Packages.software.amazon.awssdk.auth.credentials.StaticCredentialsProvider.create(awsBasicCredentials);

var region = Packages.software.amazon.awssdk.regions.Region.AWS_CN_GLOBAL;
var uri =  Packages.java.net.URI.create("http://host");
var client =  Packages.software.amazon.awssdk.services.s3.S3Client.builder()
                                                            
                                                            .credentialsProvider(credentials)
                                                            .region(region)
                                                            .endpointOverride(uri)
                                                            .build(); 
var request  = Packages.software.amazon.awssdk.services.s3.model.GetObjectRequest.builder()
                                                                        .bucket("/bucketname")                                      
                                                                        .key("key")
                                                                        .build();
var response = client.getObject(request);
return response;

我使用/bucketname,因为最后的链接看起来像主机/桶名,而不是bucketname.host

S3Exeption:

代码语言:javascript
运行
复制
Caused by: software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 403, Request ID: tx0000000000000162eece0-00633fea7f-306fc-msk-rt1)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82)
    at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:60)
EN

回答 1

Stack Overflow用户

发布于 2022-10-07 15:16:51

桶名只能由小写字母、数字、点(.)和连字符(-)组成。

下面是S3 Java代码,它工作并返回一个byte[],它表示位于给定的亚马逊S3桶中的对象。

在本例中,路径表示写入对象的本地文件系统。FOr示例,一个PDF文件。

代码语言:javascript
运行
复制
package com.example.s3;

// snippet-start:[s3.java2.getobjectdata.import]
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
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;
// snippet-end:[s3.java2.getobjectdata.import]

/**
 * Before running this Java V2 code example, set up your development environment, including your credentials.
 *
 * For more information, see the following 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" +
         "    <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 = args[0];
        String keyName = args[1];
        String path = args[2];

        ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create();
        Region region = Region.US_EAST_1;
        S3Client s3 = S3Client.builder()
            .region(region)
            .credentialsProvider(credentialsProvider)
            .build();

        getObjectBytes(s3,bucketName,keyName, path);
        s3.close();
    }

    // snippet-start:[s3.java2.getobjectdata.main]
    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);
        }
    }
    // snippet-end:[s3.java2.getobjectdata.main]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73985701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档