2016-08-01 69 views
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; 
     } 
    } 
+0

服务器上的时钟可能错了吗? – russau

+0

*正斜线被转义(%5C)*'%5C'不是正斜线/斜线。这是一个\反斜杠。也许这给你一些想法? –

+0

是的,谢谢。事实证明,prod数据库中有使用反斜杠的较旧数据,而我的计算机上的开发数据库却有正斜杠。当我用开发数据更新prod表时,所有人都神奇地开始工作。 –

回答

0

由于在评论中的一个建议,我发现了问题:原来,督促数据库的人不得不在它以前的数据所用反斜杠,而在我的电脑上开发数据库有斜杠。当我用开发数据更新prod表时,所有人都神奇地开始工作。

相关问题