使用SigV4 API将文件上载到Amazon S3

时间:2015-07-24 12:02:16

标签: java amazon-web-services amazon-s3

我希望使用他们提供的其他api将图像上传到亚马逊S3。我知道如何从this文档计算SigV4的签名密钥。
This文档告诉您如何签署请求。但我觉得应该签署什么以及应该在哪里提出规范要求令人困惑?它应该放在请求中的单独标题中吗?

是否有使用java的工作示例/示例{?1}?

2 个答案:

答案 0 :(得分:1)

如果您有一个非常具体的理由不使用提供的SDK,那么最简单的方法是使用它来查看请求如何在已经工作的库中执行。您可以查看Java SDK本身来解决这个问题,但这有点密集。

这是我最喜欢的,虽然我认为它是在sig v3上:
http://geek.co.il/2014/05/26/script-day-upload-files-to-amazon-s3-using-bash
你可以找到v4的相似例子:
http://geek.co.il/2014/11/19/script-day-amazon-aws-signature-version-4#footnote_0_33255

您可以在极少数代码行中看到所有内容的计算方式以及标题中的内容。

修改
请查看http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-examples-using-sdks.html#sig-v4-examples-using-sdk-java以了解您正在寻找的内容。它只有最低限度才能实现这一目标。

答案 1 :(得分:1)

aws-v4-signer-java是一个轻量级的零依赖库,可以轻松生成AWS V4签名。

String contentSha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
HttpRequest request = new HttpRequest("GET", new URI("https://examplebucket.s3.amazonaws.com?max-keys=2&prefix=J"));
String signature = Signer.builder()
        .awsCredentials(new AwsCredentials(ACCESS_KEY, SECRET_KEY))
        .header("Host", "examplebucket.s3.amazonaws.com")
        .header("x-amz-date", "20130524T000000Z")
        .header("x-amz-content-sha256", contentSha256)
        .buildS3(request, contentSha256)
        .getSignature();

如果您想自己实施,请查看https://github.com/lucasweb78/aws-v4-signer-java/blob/master/src/main/java/uk/co/lucasweb/aws/v4/signer/Signer.java以获取如何操作的示例。

免责声明:我是图书馆作者。