문제발생)
포스트맨으로 presignedURL의 주소는 받아와지는데 다시 PUT으로 이미지를 올리려고 하니까
The request signature we calculated does not match the signature you provided. Check your key and signing method.
에러가 발생했다..
분명히 어제까지는 잘 올라가졌는데 말이지...
흐으음...
일단 에러메세지를 번역해보니까
우리가 계산한 요청 서명이 당신이 제공한 서명과 일치하지 않습니다. 키와 서명 방법을 확인하십시오.
라고 되어있다.
제공한 서명과 일치하지 않는다고..? 엑세스키랑 시크릿키 틀렸나..?
근데 엑세스키 시크릿키 틀렸으면 URL이 발급될리가 없잖아... URL은 잘 발급되는데.... 끄음..뭐지...ㅠㅠ
시도해보자)
https://aws.amazon.com/ko/premiumsupport/knowledge-center/api-gateway-iam-sigv4-mismatch/
API Gateway의 IAM 인증을 통한 SigV4 서명 불일치 오류 문제 해결
API Gateway에 대한 IAM 인증을 사용하여 SigV4로 서명된 요청을 할 때 서명 불일치 오류를 해결하려면 어떻게 해야 하나요? 최종 업데이트 날짜: 2023년 2월 7일 Amazon API Gateway에 대한 Signature Version 4(SigV
aws.amazon.com
public String signBucket(String fileName) {
S3Presigner preSigner = getPreSigner();
String keyName = "ola/" + createFileName(fileName);
String bucketName = bucket;
try {
PutObjectRequest objectRequest = PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.contentType("image/png")
.contentType("image/jpg")
.contentType("image/gif")
.build();
PutObjectPresignRequest preSignRequest = PutObjectPresignRequest.builder()
.signatureDuration(Duration.ofMinutes(10))
.putObjectRequest(objectRequest)
.build();
PresignedPutObjectRequest presignedRequest = preSigner.presignPutObject(preSignRequest);
String myURL = presignedRequest.url().toString();
System.out.println("Presigned URL to upload a file to: " +myURL);
System.out.println("Which HTTP method needs to be used when uploading a file: " + presignedRequest.httpRequest().method());
// 이 URL을 사용하여 Amazon S3 버킷에 콘텐츠를 업로드합니다.
URL url = presignedRequest.url();
// 연결을 만들고 이 연결을 사용하여 미리 지정된 URL을 사용하여 새 개체를 업로드합니다.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type","text/plain");
connection.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write("This text was uploaded as an object by using a presigned URL.");
out.close();
connection.getResponseCode();
System.out.println("HTTP response code is " + connection.getResponseCode());
return url.toString();
} catch (S3Exception | IOException e) {
e.getStackTrace();
}
return null;
}
.contentType("image/png") 을 여러종류 지정해줘서 안됐던것이었다.
public String signBucket(String fileName) {
S3Presigner preSigner = getPreSigner();
String keyName = "ola/" + createFileName(fileName);
String bucketName = bucket;
try {
PutObjectRequest objectRequest = PutObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.contentType("image/png")
.build();
PutObjectPresignRequest preSignRequest = PutObjectPresignRequest.builder()
.signatureDuration(Duration.ofMinutes(10))
.putObjectRequest(objectRequest)
.build();
PresignedPutObjectRequest presignedRequest = preSigner.presignPutObject(preSignRequest);
String myURL = presignedRequest.url().toString();
System.out.println("Presigned URL to upload a file to: " +myURL);
System.out.println("Which HTTP method needs to be used when uploading a file: " + presignedRequest.httpRequest().method());
// 이 URL을 사용하여 Amazon S3 버킷에 콘텐츠를 업로드합니다.
URL url = presignedRequest.url();
// 연결을 만들고 이 연결을 사용하여 미리 지정된 URL을 사용하여 새 개체를 업로드합니다.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type","text/plain");
connection.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write("This text was uploaded as an object by using a presigned URL.");
out.close();
connection.getResponseCode();
System.out.println("HTTP response code is " + connection.getResponseCode());
return url.toString();
} catch (S3Exception | IOException e) {
e.getStackTrace();
}
return null;
}
.contentType("image/png") 를 하나만 해줬더니 잘 올라간다..
그러면 여러종류의 이미지 파일을 올리려면 어떻게 해야하는거지...? 하나 해결하면 또 산넘어 산이네..
'Debug Log' 카테고리의 다른 글
| Only one auth mechanism allowed; only (0) | 2023.03.02 |
|---|---|
| The request signature we calculated does not match the signature you provided. Check your key and signing method. (0) | 2023.03.02 |
| Required request parameter for method parameter type String is not present (0) | 2023.03.02 |
| presignedUrl 로 받아온 URL에 이미지 파일 올리기 400에러 (1) | 2023.03.01 |
| S3버킷 연동 에러) The bucket does not allow ACLs (0) | 2023.02.27 |