有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

amazon web services Java AWS s3:如何使用Md5预签名url设置和上载内容

我正在尝试生成一个带有MD5内容的AWS预签名url。url是generate,但当我使用它上载内容时,它在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);

使用预签名url上载数据的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) 个答案

  1. # 1 楼答案

    我可以通过添加以下代码来解决此问题:

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

    确保在构建预签名url时添加的MD5代码与用于设置“content-MD5”标题的代码相同