由于空格android,AWS S3预先签名的url导致SignatureDoesNotMatch错误

问题描述 投票:0回答:1

我的S3中有一个字符串字体名称(Joyful Juliana),在其名称之间有一个空格。它的关键字显示为Joyful Juliana,网址有Joyful + Juliana编码格式。

在应用程序方面,我尝试使用URLEncoding处理它但我收到SignatureDoesNotMatch错误。

我尝试使用String.replace()和String.replaceAll()函数,但仍然得到相同的错误。

这是我生成预签名URL的方式:

public String generatePresignedURL(String key) {
    GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(defaultBucketName, key);
    String url = s3Client.generatePresignedUrl(generatePresignedUrlRequest).toString();
    return url;
}

我通过的关键是这个

String.format("files/fonts/%s", fontItem.getName())

看起来AWS以自己的方式处理url的编码,如S3HttpUtils类所示。

任何建议/解决方案?

android amazon-web-services amazon-s3
1个回答
0
投票

根据S3对象键名称的指导:https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

以下字符集通常可以安全地用于密钥名称:

字母数字charatters 0-ya-for-3h

特殊字符!, - ,_,。,*,',(和)

根据S3,由SDK来实现对不安全的特殊字符的处理。 AWS Android SDK - 2.3.x及更早版本用于正确处理此问题。在2.4.0中引入了回归,它对非安全字符进行编码,因此您会收到错误。

如果您使用的是最新版本,建议仅在您的密钥名称中使用安全字符。

© www.soinside.com 2019 - 2024. All rights reserved.