2012-02-07 4 views
4

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

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

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

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

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

2

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

EG:

cdn.yourdomain.com/js/your_script.js 
rather than: 
abc12345.cloudfront.net/js/your_script.js 
0

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

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

Смежные вопросы