Amazon S3 - GetPreSignedUrlRequest在我的开发机器上运行,但在代码上传到Web服务器时却不行

时间:2016-08-01 18:33:14

标签: asp.net amazon-s3 amazon

我在c#(WebForms代码隐藏)中有一个函数,它创建了一个存储在Amazon S3云服务器上的图像的URL(代码如下所示)。当我在我的开发系统上运行它时工作正常,但是当我在生产的.NET Web服务器上运行它时,它失败了(我的图像文件的URL只会导致网页上的图像图标损坏)。

在每种情况下,URL似乎都相同,除了: 1)在开发机器上,URL包含正斜杠(但是其他特殊字符被转义),在生产机器上,正斜杠被转义(%5C) 2)签名不同(正如我所料)

当我将生产机器中的URL复制并粘贴到我的本地浏览器中时,它不起作用,但我认为这是因为它包含了计算签名中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;
        }
    }

1 个答案:

答案 0 :(得分:0)

感谢其中一条评论中的建议,我发现了问题:结果是,prod数据库中的旧数据使用了反斜杠,而我计算机上的开发数据库有正斜杠。当我用dev数据更新prod表时,所有人都神奇地开始工作。