在C#中签署POST表单以上传到Amazon S3

时间:2011-08-09 16:37:07

标签: c# amazon-s3

我无法签署Amazon S3的政策文件。

有关于如何在Ruby,Java和Python中执行此操作的示例,但是当我尝试在C#中执行此操作时,它并没有成功。我一直得到一个无效的签名,我不知道我哪里出错了。 http://aws.amazon.com/articles/1434

任何人都可以提供类似文章中的示例,除了C#?

感谢。

1 个答案:

答案 0 :(得分:9)

解决了遇到同样问题的其他人。

class Program
{
    static string secretKey = "Removed";

    static void Main(string[] args)
    {
        string policyStr = @"{""expiration"": ""2012-01-01T12:00:00.000Z"",""conditions"": [{""bucket"": ""<bucket>"" },{""acl"": ""public-read"" },[""eq"", ""$key"", ""<filename>""],[""starts-with"", ""$Content-Type"", ""image/""],]}";

        GetSig(policyStr);
    }

    static void GetSig(string policyStr)
    {
        string b64Policy = Convert.ToBase64String(Encoding.ASCII.GetBytes(policyStr));

        byte[] b64Key = Encoding.ASCII.GetBytes(secretKey);
        HMACSHA1 hmacSha1 = new HMACSHA1(b64Key);
        Console.WriteLine(policyStr);
        Console.WriteLine(b64Policy);
        Console.WriteLine();
        Console.WriteLine(
            Convert.ToBase64String(hmacSha1.ComputeHash(Encoding.ASCII.GetBytes(b64Policy))));

        Console.ReadKey();
    }
}