0
我在c#中有一个函数(WebForms代码隐藏),它创建存储在Amazon S3云上的映像的URL服务器(代码如下)。当我在我的开发系统上运行它时,它工作正常,但是当我在生产.NET Web服务器上运行它时,它失败(网址到我的图像文件只会导致网页上的图像损坏)。Amazon S3 - GetPreSignedUrlRequest在我的开发机器上工作,但不在代码上传到Web服务器时
URL在每种情况下似乎都是一样的,除了: 1)在开发机器上,URL包含正斜杠(但其他特殊字符会被转义),并且在生产机器上,正斜杠会被转义%5C) 2)签名是不同的(如我所料)
当我复制&粘贴到我的本地浏览器的网址,它不起作用,但我认为这是因为它包括一些计算签名中的URL的计算机的ID。
为什么完全相同的代码在一台机器上工作,而不是在另一台机器上工作?
public string CalculateURL
{
// build a url with the AWS credentials to get the file from the Amazon S3 cloud storage
get
{
string secretKey = "secretkeygoeshere";
string accessKey = "accesskeygoeshere";
string url = "";
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3Config asConfig = new AmazonS3Config()
{
ServiceURL = "s3.amazonaws.com",
RegionEndpoint = Amazon.RegionEndpoint.USEast1
};
s3 = new AmazonS3Client(awsCredentials, asConfig);
GetPreSignedUrlRequest preSignedURLreq = new GetPreSignedUrlRequest() { Key = relative_path, BucketName = "my-bucket-name", Expires = DateTime.Now.AddHours(12) };
url = s3.GetPreSignedURL(preSignedURLreq);
return url;
}
}
服务器上的时钟可能错了吗? – russau
*正斜线被转义(%5C)*'%5C'不是正斜线/斜线。这是一个\反斜杠。也许这给你一些想法? –
是的,谢谢。事实证明,prod数据库中有使用反斜杠的较旧数据,而我的计算机上的开发数据库却有正斜杠。当我用开发数据更新prod表时,所有人都神奇地开始工作。 –