Обновление
Эта ошибка была исправлена в Версии 1.4.1.0 SDK.
Обход
Это подтвержденная ошибка в AWS SDK , поэтому до тех пор, пока они не выпустят исправление, я собираюсь использовать этот хак, чтобы все заработало:
Укажите тип контента в точности так, как вы хотите, чтобы он выглядел в заголовке ответа. Итак, если вы хотите, чтобы S3 возвращал тип содержимого image/svg+xml
, установите его точно так:
ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides();
headerOverrides.ContentType = "image/svg+xml";
Теперь, как обычно, сгенерируйте предварительно подписанный запрос:
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
.WithBucketName(bucketName)
.WithKey(objectKey)
.WithProtocol(Protocol.HTTPS)
.WithExpires(DateTime.Now.AddMinutes(6))
.WithResponseHeaderOverrides(headerOverrides);
string url = S3Client.GetPreSignedURL(request);
Наконец, «исправьте» полученный URL-адрес с помощью правильно закодированного значения URL для вашего типа контента:
url = url.Replace(contentType, HttpUtility.UrlEncode(contentType));
Да, это грязный обходной путь, но, эй, он работает для меня! :)