доступ к изображениям из s3 в случае нечувствительности к регистру - PullRequest
11 голосов
/ 03 марта 2012

Я использовал express в node.js, где он обслуживал статические изображения без учета регистра, но когда я перешел на s3, я обнаружил, что изображения чувствительны к регистру.

Есть ли способ в amazon s3 обслуживать статические файлы (изображения) без учета регистра? любая конфигурация? в противном случае лучше всего конвертировать изображения в нижний регистр, прежде чем поместить их в s3.

UPDATE

Другая проблема, c ++. Jpg, не отрисовывается s3, ее нужно преобразовать в c% 2B% 2B.jpg. Принимая во внимание, что C ++. JPG отображается как шарм с помощью Express. Любой обходной путь здесь?

Ответы [ 4 ]

17 голосов
/ 03 марта 2012

Нет, имена файлов на S3 чувствительны к регистру.Предположительно, это ограничение основной файловой системы Linux / Unix.

Я всегда рекомендую людям загружать только строчные имена файлов.

2 голосов
/ 07 августа 2017

Следует также отметить, что S3 предназначен для доступа по HTTP (S).URL в HTTP чувствительны к регистру.Серверы, которые разрешают доступ к URL-адресам без учета регистра, сломаны, поскольку они могут загрязнять кеши.Файлы image.jpg, Image.jpg, IMAGE.JPG могут указывать на один и тот же файл, но кэш-память не будет знать и загружать один и тот же файл несколько раз.То же самое для веб-браузера.Если вы ссылаетесь на одно и то же изображение дважды на странице, один раз как image.jpg и один раз как Image.jpg, браузер загрузит изображение дважды.Поэтому нет смысла требовать, чтобы S3 учитывал регистр символов.Вместо этого придерживайтесь того, что говорится в RFC о URL и HTTP, и исправьте ваш сайт.

Кстати, независимо от того, реализовано ли базовое хранилище объектов в POSIX (Unix, Linux) или Windows, для этой темы не имеет значения, речь идет об HTTPи спецификации URL (RFC).

1 голос
/ 09 июля 2015

Каждый раз, когда вы загружаете файл на S3, вы создаете URL. Чтобы убедиться, что вы в безопасности, вы можете оценить имена файлов, которые вы используете. Спецификация RFC-Something для URL-адресов HTTP допускает включение только следующих символов в URL-адреса.

RegEx

[a-zA-Z0-9_-]+

Любое имя файла, которое не соответствует этому шаблону, которое вы, возможно, захотите изменить, чтобы обеспечить соответствие URL. AWS является CasE-SensITive прежде всего потому, что он предназначен как Object Store . При сохранении объектов. Часто записываемые объекты сохраняются с хэш-кодированием URL-адреса base64, чтобы обеспечить более надежное время поиска объектов во время поиска.

0 голосов
/ 11 октября 2018

В AWS добавлен лямбда-край. Теперь вы можете указать домен (имя хоста s3, который вы используете) для облачного фронта, настроить корзину s3 в качестве бэкэнда и прикрепить функцию лямбда-края к облачному фронту.

Выберите событие запроса средства просмотра для запуска лямбда-функции. Приведенный ниже код nodejs в лямбде преобразует все запросы, полученные облачным фронтом, в нижний регистр и передает его в бэкэнд-контейнер s3. Приведенный ниже код работал для меня.

exports.handler = (event, context, callback) => {
    // TODO implement

   const request = event.Records[0].cf.request;
   console.log (request)
   request.uri = request.uri.toLowerCase()
   console.log (request.uri)
   callback(null, request)

};

Рабочий процесс подобен приведенному ниже.

Запрос (URI смешанного регистра) -> Cloudfront -> (Лямбда-функция, которая изменит URI в нижний регистр) -> s3 (URI будет в нижнем регистре после запросаполучил)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...