Преобразование строки запроса в имя файла - лучшая практика? - PullRequest
1 голос
/ 02 декабря 2010

У меня есть обработчик (c # / asp.net), который извлекает изображения из базы данных. Текущий формат выглядит как foo.com/_image.ashx?querystring1&querystring2 Ключами строки запроса являются такие вещи, как идентификатор, ширина, уровень масштабирования и т. Д.

Я могу перевести это в имя файла (т.е. foo.com/id__999_w__128__h__200.jpg) или в целую структуру URL (т.е. foo.com/id/999/w/128/h/200/image.jpg).

Мне интересно посмотреть, что другие люди будут делать в этой ситуации, так как в сети нет статей или обсуждений этой практики.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Самым простым решением было бы base64 имя файла, тогда вы можете в значительной степени гарантировать, что имя файла будет правильным каждый раз, и не будет изменено или повреждено.

string filename = @"C:\images\myimage.png";

// You may need to change the Encoding type here
string converted = Convert.ToBase64String(
    System.Text.Encoding.Default.GetBytes(filename));
1 голос
/ 02 декабря 2010

Лучшие практики - это сложная вещь, многие варианты, которые вы хотите сделать, зависят от вашей ситуации.

Сегодня хороший способ справиться с этим - загрузить изображения на сервер, такой как AmazonS3 вместо того, чтобы хранить их в вашей базе данных.Amazon S3 имеет API, который вы можете программировать, поэтому приложение, которое вы уже написали и хранит изображения в базе данных, может быть настроено для загрузки их в Amazon S3.Затем вы сохраните URL-адрес изображения в вашей базе данных.

Это решит ряд проблем.
1. Изображения, хранящиеся в Amazon S3, могут быть выставлены на Amazon CloudFront, который является CDN и поможетВы можете направить данные изображения к вашим конечным пользователям по быстрому маршруту через Интернет.2. Вы можете применить заголовки expires к этим изображениям, чтобы они кэшировались в браузере клиента, и пользователь получит оптимальную производительность при использовании вашего сайта.В вашем текущем механизме вы должны добавить эти заголовки программно.3. Загрузка больших двоичных данных в базы данных и из них никогда не была самой эффективной операцией для базы данных, поэтому вы сможете полностью избавиться от этого кода.4. Вы можете применить к этим изображениям доменное имя без файлов cookie, чтобы предотвратить ненужную передачу файлов cookie, а также немного повысить производительность для ваших пользователей.Например, вы можете разместить свой веб-сайт на www.mysite.com, для ваших изображений вы можете назначить имя images.mysitestatic.com, и таким образом вы узнаете, что у вас нет файлов cookie на доменном имени mysitestatic.com, которое вашпользователю нужно будет загружать и скачивать каждый запрос.

Существует множество преимуществ размещения изображений на сервере, а не передача данных, таких как _images.ashx.Что касается URL-адресов, которые вы представили выше, они оба практически одинаковы.Если вы не стремитесь извлечь из них пользу, это не имеет значения.URL зависит от ваших целей по производительности / кэшированию / SEO и т. Д.

Надеюсь, это поможет.Mark

0 голосов
/ 02 декабря 2010

Извините, я новичок в этом, но я хотел прокомментировать ответ выше.

Я не понимаю, что вы получаете BASE64-кодировкой URL-адреса? Это не приведет к сокращению URL, строка в кодировке base64 обычно будет на 33% длиннее.

Вот пример: C: \ Images \ myimage.png

Base64 в кодировке: QzpcaW1hZ2VzXG15aW1hZ2UucG5n

Если вы хотите, чтобы URL был коротким, и вы хотели убедиться, что имя файла является правильным в соответствии с решением, приведенным выше, вы должны просто использовать само имя файла. Версия в кодировке base64 не дает вам никаких преимуществ.

Хотя, я не уверен, что это поможет вам, потому что это вообще не связано с решением вашей базы данных. если вы не хотите хранить "images / myimage.png" в поле в вашей базе данных и ваш URL будет выглядеть следующим образом: foo.com/images/image.jpg?h=5&w=10

В этом формате имя запрашиваемого ресурса отделяется от представления изображения на высоте 5 и ширине 10.

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