java sdk 2.x 生成的预签名url域名替换为cloudfront域名报错

0

使用java sdk 2.x生成的预签名url在浏览器可以正常访问,但是其中的域名更换为cloudfront的域名后浏览器访问提示

<Code>SignatureDoesNotMatch</Code>
<Message>
    The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>

生成的域名是这样的 https://bucketname.s3.amazonaws.com 改成 https://bucketname.s3.us-east-1.amazonaws.com 还是提示同样的错误; 代码如下:

public static String getS3ObjectUrl(String keyName,String objectName) throws UnsupportedEncodingException {
		AwsCredentials awsCredentials =AwsBasicCredentials.create(s3AccessKeyId, s3SecretAccessKey);
		AwsCredentialsProvider credentialsProvider=StaticCredentialsProvider.create(awsCredentials );
		Region region = Region.US_EAST_1;
        S3Presigner presigner = S3Presigner.builder()
                .region(region)
                 .credentialsProvider(credentialsProvider)
                .build();
		String urlString= getPresignedUrl(presigner,s3Bucket,keyName,objectName);
		presigner.close();
		return urlString;
	}
	
	//获取s3 对象预签名路径
	public static String getPresignedUrl(S3Presigner presigner, String bucketName, String keyName,String objectName) throws UnsupportedEncodingException {
        try {
            GetObjectRequest getObjectRequest = GetObjectRequest.builder()
            		.responseContentDisposition("attachment; filename=\""+URLEncoder.encode(objectName, "UTF-8")+"\"") //设置更改后的文件名
                    .bucket(bucketName)
                    .key(getS3KeyName(keyName))
                    .build();

            GetObjectPresignRequest getObjectPresignRequest = GetObjectPresignRequest.builder()
                    .signatureDuration(Duration.ofMinutes(100))
                    .getObjectRequest(getObjectRequest)
                    .build();

            PresignedGetObjectRequest presignedGetObjectRequest = presigner.presignGetObject(getObjectPresignRequest);
            String theUrl = presignedGetObjectRequest.url().toString();
            System.out.println("Presigned URL: " + theUrl);
            return theUrl;

        } catch (S3Exception e) {
            e.getStackTrace();
        }
        return "";
    }

请帮忙看看是什么原因,谢谢!!!

wcl
gefragt vor 2 Monaten438 Aufrufe
Keine Antworten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen