Недопустимые ключи AWS .NET SDK - PullRequest
0 голосов
/ 02 февраля 2012

Я использую Amazon 100 * AWS .NET SDK для подключения к Amazon S3.

Метод WithKey () PutObjectRequest автоматически кодирует любую строку, которую вы ему бросаете, однако есть некоторые шаблоны, которые он не может обработать. Не обрабатывать ключи означает выдать следующую ошибку:

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

Я не нашел почти никакой документации по легальным ключам от Amazon. Какие шаблоны запрещены для использования в ключах S3 и выдают это исключение?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Я создал метод для нормализации слеша в ключах при загрузке в

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

Привет.

1 голос
/ 04 февраля 2012

В моем конкретном случае проблема была двоякой:

  1. Amazon не может обработать символ обратной косой черты в клавишах
  2. Amazon не позволяет папкам заканчиваться наточка

Я написал следующие два метода, которые помогут при создании моих ключей:

// 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
}
...