Java AWS s3:如何使用Md5预先签名的URL设置和上载内容

时间:2016-01-23 00:14:49

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

我正在尝试使用MD5内容生成AWS预先签名的网址。 url是生成的,但是当我使用它来上传内容时,它会因HTTP 403而失败。错误

生成预签名URL的Java代码如下:

    GeneratePresignedUrlRequest generatePresignedUrlRequest = new     GeneratePresignedUrlRequest(bucketName, key, httpMethod);
    byte[] resultByte = DigestUtils.md5(/*byte array*/);    
    String streamMD5 = new String(java.util.Base64.getEncoder().encode(resultByte));
    generatePresignedUrlRequest.setContentMd5(streamMD5);
    s3Client.generatePresignedUrl(generatePresignedUrlRequest);

使用预签名网址上传数据的Java代码:

   HttpURLConnection connection;
    try {
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("PUT");
        OutputStream output = connection.getOutputStream();
        output.write(getImage());
        output.flush();
        assertEquals(OK, connection.getResponseCode());
    } catch (IOException e) {
        LOGGER.info("Exception: {}", e);
    }

我不确定需要在上传代码上添加什么才能使其正常运行。

1 个答案:

答案 0 :(得分:1)

我可以通过添加以下代码来解决它:

byte[] resultByte = DigestUtils.md5(/*byte array*/);    
String streamMD5 = new String(java.util.Base64.getEncoder().encode(resultByte));
connection.setRequestProperty("content-md5", streamMD5);

确保您在构建预签名网址时添加的MD5代码与用于设置" content-md5"相同头。