Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AWS S3预签名url由于空格而导致SignatureDesNotMatch错误_Android_Amazon Web Services_Amazon S3 - Fatal编程技术网

Android AWS S3预签名url由于空格而导致SignatureDesNotMatch错误

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

我的S3中有一个字符串字体名称(Joying Juliana),如图所示,名称之间有一个空格。它的键显示为joying Juliana,url采用joying+Juliana编码格式

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

我尝试使用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类所示


有什么建议/解决方案吗?

根据S3关于对象键名称的指南:

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

字母数字字符[0-9a-zA-Z]

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

根据S3,SDK负责对不安全的特殊字符进行处理。AWS Android SDK-2.3.x和早期版本用于正确处理此问题。在2.4.0中引入了一个回归,它对非安全字符进行编码,因此您会得到错误

建议在使用最新版本时,仅在密钥名中使用安全字符