如何使用.NET API为AWS S3上传生成请求签名?

时间:2011-04-01 16:15:11

标签: c# amazon-s3 amazon-web-services

我直接从亚马逊使用.NET API将一些文件上传到S3。

但是,我收到了异常消息:The request signature we calculated does not match the signature you provided. Check your key and signing method.

我的代码如下:

    AmazonS3 s3Client = AWSClientFactory.CreateAmazonS3Client("myaccessid","mysecretid");
    List<string> allFileNames = ProcessFiles(@"c:\Dev\pktest\");
    foreach (string file in allFileNames)
    {                   

        PutObjectRequest putObjectRequest = new PutObjectRequest
        {
            BucketName = "rhspktest",
            FilePath = file,
            Key = file,
            Timeout = 3600000                       
         };

         try
         {
             using (S3Response response = s3Client.PutObject(putObjectRequest)) { };
         }
         catch (AmazonS3Exception ex)
         {
             Console.WriteLine(ex.Message);
         }

            Console.WriteLine(file);

      }
      Console.Read();

有什么事情表明我做错了吗?

ProcessFiles方法只返回该目录中的文件名列表。

1 个答案:

答案 0 :(得分:11)

ProcessFiles只返回文件名或完整路径吗?无论如何,FilePathKey不太可能设置为相同的东西。

应将

FilePath设置为要上载的本地文件的完整路径。例如c:\Dev\pktest\myfile.txt

Key是要存储在S3上的文件的名称。例如myfile.txt。或者如果你想保持相同的路径结构:Dev/pktest/myfile.txt(注意正斜杠)