обеспечение динамических URL-адресов изображений в веб-приложении: использовать хранилище BLOB-объектов? - PullRequest
0 голосов
/ 30 сентября 2010

Я хочу обслуживать изображения в веб-приложении, используя сеансы, так что ссылки на изображения истекают после истечения сеанса.

Если я показываю фактические ссылки на хранилище изображений файловой системы, скажем,http://www.mywebapp.com/images/foo1.jpg это явно затрудняет остановку будущих запросов на изображение (один из которых пользователь вышел из сеанса).Вот почему я подумывал о том, чтобы поместить изображения в базу данных sqlite и обслуживать их оттуда.

Кажется, что использование базы данных для хранения изображений считается плохой практикой (хотя, очевидно, хранилище BLOB-объектов GAE, кажется, обеспечивает этофункциональность), поэтому я пытался выяснить, какие альтернативы будут.

1) Возможно, я делаю некоторую переписывание url следующим образом:

http://www.mywebapp.com/images/[session_id]/foo1.jpg Думая об использовании nginx, но кажется (на первый взгляд), что это потребует некоторого взлома для выполнения?

2) Скопируйте файлы в физический каталог файловой системы и удалите по окончании сеанса.хотя это кажется довольно грязным?

Существуют ли какие-либо стандартные методы выполнения этого URL-адреса динамического изображения?

Я использую web.py - если это поможет.

Многиеспасибо!

Ответы [ 3 ]

2 голосов
/ 30 сентября 2010

mod_secdownload от lighty хорошо помог мне решить эту проблему.Вы можете прочитать больше об этом на http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

В вики Lighttpd также есть общая статья о вашей проблеме: http://redmine.lighttpd.net/wiki/1/HowToFightDeepLinking

1 голос
/ 30 сентября 2010

Почему так сложно?

Служит для изображения под именем, которое предоставил пользователь (т.е. http://www.mywebapp.com/images/foo1.jpg)

Сохраните изображения в каталоге, используя UUID в качестве имени.

Создайте карту имен файлов с UUID в сеансе.

В обработчике для /images/ найдите настоящее имя файла на карте. Вернуть 404, если такой записи не существует. В противном случае обслуживайте изображение.

Когда сессия закрыта, удалите все файлы с карты.

В задании cron удалите все изображения старше одного дня.

Таким образом, несколько пользователей могут загружать одно и то же изображение (одно и то же имя), изображения удаляются как можно скорее или с помощью задания cron (если происходит сбой сервера или что-то подобное).

0 голосов
/ 30 сентября 2010

Комбинация двух ваших идей (копирование в каталог, срок действия по истечении сеанса) может быть обобщена для создания нового каталога (может быть простым, как символическая ссылка) каждые 15 минут.При создании новой символической ссылки также удалите ссылку, которой уже час.Всегда ссылайтесь на новое имя в вашем коде.

...