Jef*_*ger 1 .net c# amazon-s3 amazon-web-services amazon-cloudfront
我已经正确设置了带有 S3 源的 Cloudfront 签名 URL,并且正在使用response-content-disposition
查询字符串参数来指定文件下载名称。当内容处置文件名不包含空格时,我使用 .NET AWS SDKAmazonCloudFrontUrlSigner.GetCannedSignedURL
方法生成的签名 URL可以正常工作。但是,如果文件名包含空格,则访问被拒绝。因此,类似于下面的代码将生成一个拒绝访问的 URL。
var contentDisposition = HttpUtility.UrlEncode("attachment;filename=My File.txt");
var key = "example.txt?response-content-disposition="+contentDisposition;
return AmazonCloudFrontUrlSigner.GetCannedSignedURL(
AmazonCloudFrontUrlSigner.Protocol.https,
"myBucket",
cloudFrontPrivateKey,
key, cloudFrontAccessKeyId, expirationDateTime);
Run Code Online (Sandbox Code Playgroud)
它显然似乎与 URL 编码有关。
我已经通读了有关通过 CloudFront 提供私有内容的文档中的所有信息。我读了AmazonCloudFrontUrlSigner
类的代码。我还尝试了多种组合,UrlEncode
例如不编码,仅编码文件名部分,甚至不编码但在生成签名 URL 后用编码版本替换。所有这些要么拒绝访问,要么给出签名与 url 不匹配的错误。
该HttpUtility.UrlEncode
方法将空格编码为+
根据标准可接受的空格。但是,由于某种原因我不明白,这会导致签名 URL 和内容处置出现问题。空间的另一种编码%20
正常工作。所以编码后,更换+
用%20
。工作版本是:
var contentDisposition = HttpUtility.UrlEncode("attachment;filename=My File.txt");
contentDisposition = contentDisposition.Replace("+", "%20");
var key = "example.txt?response-content-disposition="+contentDisposition;
return AmazonCloudFrontUrlSigner.GetCannedSignedURL(
AmazonCloudFrontUrlSigner.Protocol.https,
"myBucket",
cloudFrontPrivateKey,
key, cloudFrontAccessKeyId, expirationDateTime);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2257 次 |
最近记录: |