LINUX.ORG.RU

Как правильно хранить/отдавать файлы?

 ,


1

2

Как лучше хранить файлы пользователей которые не должны быть доступны по прямым ссылкам? При этом некоторые из них являются изображениями и на них нужны превью которые тоже не должны быть доступны по прямым ссылкам.

В системе есть сессии и отдельные страницы на которых есть возможность забирать конкретный файл.

Если вкратце- сейчас сделал отдельный скрипт и генерирую md5(microtime) ссылку на файл ну и просто при обращении к скрипту проверяю сессию и потом отдаю md5 ссылку которая живет до клика, зеркала md5 на файлы храню в БД.

Может можно проще?



Последнее исправление: VictimOfLoveToLinux (всего исправлений: 2)

генерирую md5

Но зачем, ты же можешь по одной и той же ссылке (постоянной) отдавать как оригинал, так и заглушку, в зависимости от сессии. Или ты хочешь чтобы вообще было непонятно, есть картинка или нет? Тогда проще вообще не использовать ссылки и загружать картинки js-ом в сыром виде, т.е. не ссылками, а как base64 строки в JSON.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

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

VictimOfLoveToLinux
() автор топика

Ну как-то так. Кликнул на ссылку - сгенерил транзакцию, положил в бд, редиректнул на контроллер качалки - проверил хеш транзакции на основании сессионных данных + ип, отдал файл, заблокировал транзакцию.

drull ★☆☆☆
()
Ответ на: комментарий от VictimOfLoveToLinux

Ну так реферер и защитит.

Deleted
()
Ответ на: комментарий от VictimOfLoveToLinux

но если его перестанут обновлять

Кого? Веб-сервер?

heilkitty ★★
()
Ответ на: комментарий от VictimOfLoveToLinux

а в защите от передачи данных по средствам ссылок.

Передаче кому? Другому пользователю? Тогда просто проверяй в своем скрипте, которым отдаешь картинку, сессию, что залогинен тот пользователь, который имеет право видеть картинку, хеш в этом случае не нужен.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от VictimOfLoveToLinux

будет статичная ссылка которая перенаправляет тебя на заглушку

И чем тебя это не устраивает?

Ну допустим, не устраивает, ок, а что на счёт загрузки через js вообще без ссылок на картинки?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Ну допустим, не устраивает, ок, а что на счёт загрузки через js вообще без ссылок на картинки?

Я так не пробовал, есть примеры?

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от no-such-file

Спасибо ещё раз, сегодня внедрил в проект и обкатал, очень интересное решение.

Только очень мало информации на русском.

Только вот как конкретно определять формат файла на выходе? Записывать его формат на входе при конверте и хранить в таблице вместе с Base64?

А то я на выходе получаю без форматный файл, или я что-то не так делаю?

VictimOfLoveToLinux
() автор топика
Ответ на: комментарий от VictimOfLoveToLinux

Только вот как конкретно определять формат файла на выходе? Записывать его формат на входе при конверте и хранить в таблице вместе с Base64?

Тебе виднее, я ж не знаю как там у тебя логика устроена. Я бы замутил кэш для картинок в преобразованном виде, как они отдаются, т.е. всю строку вместе с mime.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Слушай я тут понял свой фейл с этим методом, я начал хранить все файлы в таком формате: ID/base64_code/mime/etc..

Ведь таблица поползёт по швам через месяца 2-3 тк каждый файл размазывается строк на 300.

Чёт я не подумал ни разу.

VictimOfLoveToLinux
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.