2012-02-02 15 views
0

私はAmazonのS3に接続するためにAmazonのAWS .NET SDKを使用しています。AWS .NET SDK不正なキー

PutObjectRequestのWithKey()メソッドは、あなたが投げる文字列を自動的にエンコードしますが、それでも処理できないパターンがいくつかあります。キーを処理しないと、次のエラーが発生します。

Amazon.S3.AmazonS3Exception: The request signature we calculated 
does not match the signature you provided 

Amazonの法的キーについては、ほとんど、またはまったくドキュメントが見つかりませんでした。どのようなパターンがS3キーで使用するのが違法で、この例外をスローしますか?

答えて

3

私は

private static string NormalizeKey(string relativePath) 
    { 
      return relativePath.Replace("~/", "").Replace(@"~\", "").Replace(@"\", @"/").Replace(@"//", @"/"); 
    } 

よろしくへのアップロード中にキーでスラッシュを正規化する方法を作成しました。私の特定のケースで

+1

おかげShoaib!キーを作成するときに誤ってフォルダを作成するのを避けるため、同様の方法があります。 [置換]呼び出しで「〜」のチルダは何ですか?それがなければ私のためにうまくいくようです。 –

+1

〜は私のコードで使用されています。なぜなら、自分のローカルプロジェクトに存在するような相対パスを設定しているからです。あなたの場合、これは避けることができます。 –

1

、問題が2倍であった:

  1. Amazonはバックスラッシュを扱うことができない「\」キーで文字
  2. Amazonのフォルダが期間
で終了することはできません。

私は私のキーを構築する際に支援するために、次の2つの方法が書かれている:

// Cleans a piece of a key - a folder name or final object name: 
// - replaces illegal characters with valid ones 
// - avoids accidental folder creation by removing slashes inside the key 
private string CleanPartialKey(string partialKey) 
{ 
    return partialKey.Replace('/', '-') // Add slashes separately - avoid creating accidental folders 
        .Replace('\\', '_'); // Amazon knows not how to deal with backslashes, so replace them with something else 
} 

// Ensures a full key does not have any illegal patterns. 
// This should only be called with a complete key 
private string CleanKey(string fullKey) 
{ 
    return fullKey.Replace("./", "/"); // ending a folder with a period is illegal 
} 
関連する問題