Android AWS S3预签名url由于空格而导致SignatureDesNotMatch错误
我的S3中有一个字符串字体名称(Joying Juliana),如图所示,名称之间有一个空格。它的键显示为joying Juliana,url采用joying+Juliana编码格式 在应用程序方面,我尝试使用URLEncoding处理它,但我得到SignatureDesNotMatch错误 我尝试使用String.replace()和String.replaceAll()函数,但仍然得到相同的错误 这是我生成预签名URL的方式:Android AWS S3预签名url由于空格而导致SignatureDesNotMatch错误,android,amazon-web-services,amazon-s3,Android,Amazon Web Services,Amazon S3,我的S3中有一个字符串字体名称(Joying Juliana),如图所示,名称之间有一个空格。它的键显示为joying Juliana,url采用joying+Juliana编码格式 在应用程序方面,我尝试使用URLEncoding处理它,但我得到SignatureDesNotMatch错误 我尝试使用String.replace()和String.replaceAll()函数,但仍然得到相同的错误 这是我生成预签名URL的方式: public String generatePresignedU
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类所示
有什么建议/解决方案吗?根据S3关于对象键名称的指南: 以下字符集通常可以安全地用于密钥名: 字母数字字符[0-9a-zA-Z] 特殊字符!,-,_,,*,',(及) 根据S3,SDK负责对不安全的特殊字符进行处理。AWS Android SDK-2.3.x和早期版本用于正确处理此问题。在2.4.0中引入了一个回归,它对非安全字符进行编码,因此您会得到错误 建议在使用最新版本时,仅在密钥名中使用安全字符