403 Запрещенная проблема в Amazon S3 - PullRequest
4 голосов
/ 07 февраля 2012

Я использую Amazon S3 для размещения изображений пользователей. Хотя я установил их доступность для всех (это означает, что я могу получить доступ к изображениям по их URL-адресам в Chrome / Firefox / IE), я получаю исключение 403 Forbidden в своем коде. Это обработчик миниатюр (C #, ASP.NET)

string file = context.Request.QueryString[IMG_PARAM].Trim().ToLower().Replace("\\", "/");

      if (file.StartsWith("http") || file.StartsWith("https"))
      {
          using (System.Drawing.Image im = System.Drawing.Image.FromStream(WebRequest.Create(file).GetResponse().GetResponseStream()))
          using (System.Drawing.Image tn = this.CreateThumbnail(im))
          {
              tn.Save(context.Response.OutputStream, this._formatType);
          }
      }

Исключение составляет эта часть:

WebRequest.Create(file).GetResponse().GetResponseStream()

Это действительно странно для меня. Если что-то не так с ACL или разрешениями, почему я могу видеть изображения в браузере? Любая помощь будет оценена.

Ответы [ 3 ]

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

Нашли это! После долгих исследований я обнаружил, что это из-за строк URL, которые чувствительны к регистру. Оказывается, у меня где-то был .toLower ():

string file = context.Request.QueryString[IMG_PARAM].Trim().ToLower().Replace("\\", "/");

После удаления .toLower () проблема будет решена.

2 голосов
/ 02 мая 2013

Я обнаружил, что вы также получите эту ошибку, если получите доступ к своим ресурсам Cloudfront CDN с помощью CNAME, но не добавляете эти CNAMES в параметры распространения в Консоли управления AWS.

EG:

cdn.yourdomain.com/js/your_script.js
rather than:
abc12345.cloudfront.net/js/your_script.js
0 голосов
/ 28 августа 2013

У меня была такая же проблема.Это также может произойти, если вы не укажете опцию root file при настройке своего дистрибутива Cloudfront.

Когда я установил свой корневой файл в index.html, все работало прекрасно.

...