我正在尝试使用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);
}
我不确定需要在上传代码上添加什么才能使其正常运行。
答案 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"相同头。