10

我有这段简单的代码,它试图通过代理将文件上传到 Amazon S3。这是代码:

    BasicAWSCredentials basicCred = new BasicAWSCredentials("my_access_key", "my_secret_key");
    ClientConfiguration clientCfg = new ClientConfiguration();
    clientCfg.setProtocol(Protocol.HTTP);

    //setup proxy connection:
    clientCfg.setProxyHost("192.168.2.12");
    clientCfg.setProxyPort(80);




    AmazonS3 s3 = new AmazonS3Client(basicCred, clientCfg);


    String bucketName = "mybucket";
    String key = "/test/Capture.JPG";
    File file = new File("d:/Test_Data/Capture.JPG");

    System.out.println("Uploading a new object to S3 from a file");
    s3.putObject(new PutObjectRequest(bucketName, key, file));

然而,这是我从运行程序中得到的错误:

Exception in thread "main" java.lang.NullPointerException
    at com.amazonaws.util.BinaryUtils.fromHex(BinaryUtils.java:69)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1066)
    at javaapplication8.JavaApplication8.main(JavaApplication8.java:48)
Java Result: 1

我正在使用来自亚马逊的最新 aws 1.3.8 sdk。代理设置在我旁边的另一台 PC 上,它只是一个简单的 Javascript 代理 (http://www.catonmat.net/http-proxy-in-nodejs/)

我不知道为什么。有人可以帮助我吗?

4

3 回答 3

9

这是另一种方法,

ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTPS);
config.setProxyHost("YOUR_PROXY_IP");
config.setProxyPort(YOUR_PROXY_PORT);

BasicAWSCredentials creds = new BasicAWSCredentials("YOUR_KEY", "YOUR_SECRET"); 
s3Client = AmazonS3ClientBuilder.standard()
                .withClientConfiguration(config)
                .withRegion(Regions.US_EAST_2)
                .withCredentials(new AWSStaticCredentialsProvider(creds))                   
                .build();
于 2017-07-26T17:50:08.453 回答
3

我也遇到了这个问题。我在调试器中逐步检查了所有内容,发现问题的原因是 Amazon S3 客户端代码需要一个名为的标头标签"ETag",但响应包含"Etag",带有小写字母"t"

标头被放入 a Map<String,String>,因此当 Amazon S3 客户端代码调用get("ETag")时,它会返回null,然后将其馈入hexData()方法并炸毁。

这似乎发生在许多使用非 Amazon S3 服务或通过 Web 代理访问 Amazon 的 AWS S3 服务的人身上。

Headers.ETAG除了获取 Amazon 客户端源、将值更改为"Etag"并自己构建之外,我不知道有什么解决方法JAR

于 2014-03-01T20:56:48.207 回答
0

将协议更改为 HTTPS。

$clientCfg.setProtocol(Protocol.HTTPS);

于 2017-04-11T14:25:52.667 回答