Здравствуйте. В интернете ответа на свой вопрос не нашел.
Разрабатываю хранилище файлов. Хочу прикрутить функцию share как в Dropbox.
Серверная часть хранилище написана на php.
На клиентской используется javascript.
Авторизованный пользователь скачивает свой файл, отправляя header-заголовки.
Структура размещения файлов на сервер выглядит так:
- userfiles (папка в корне сайта)
- - akaldygulov@gmail.com (папка пользователя)
- - - Здесь все файлы этого пользователя
Все работает, вот только не знаю, как сделать функцию Поделиться.
Буду благодарен за любые идеи.
Очень странная модель выбрана, но... Каждому свое )
По поводу вопроса, то для Вас только 1 вариант это создание временной папки для каждого расшаренного файла из которой будете отдавать файлы без авторизации.
p.s.. Минусов Вашей схемы очень много. Например:
- как Вы будете бороться с дублированием файлов у пользователей?
- Масштабирование файлов одного пользователя по разным серверам?
- масштабировать активные и старые файлы по серверам в зависимости от нагрузки на канал..
1. Хранить файлы по их хэшу в не зависимости от их автора.
2. Хранить базу соответствия хэшей-владельцам.
3. На основании первых двух пунктов сделать систему выдачи файлов только их владельцам.
4. Открыть файл для выдачи всем желающим это уже мелкая функция того ПО которое будет отдавать файлы.
@CloudMonster У меня как раз на php и сделано. Но при большом количестве запросов лучше пробовать другие более надежные решения.
Хотя.. Большинство файлообменов рунета без проблем отдает через php..
@CloudMonster, печаль.. тоска..
На самом деле, если использовать виртуальные пути, то можно реализовать и средствами Apache. Просто php -скрипт будет жить на протяжении времени отдачи файла. Наверно это не самая большая проблема.
Как указал @L3n1n, можно смотреть в сторону других средств отдачи файлов (я лично смутно представляю каких).
С другой стороны, если пользователей будет не так уж и много, и сервер будет справляться с нагрузками, то связка php+Apache более чем рабочая.
Всё дело в том, что физическое размещение файлов на сервере не обязано соответствовать паттерну урлов, которые будет видеть пользователь.
userfiles - это вполне может быть виртуальный путь (location в терминах nginx)
Тогда легче будет сконструировать путь для шаринга.
На сервере структура файлов может быть
- files - адрес хранилища
- - adc/dcf - папка, имя которой сконструированно из имени файла
- - - adcf832dnewjernrr43n5.png - имя файла в хранилище
Параллельно вам потребуется БД для хранения связей
adcf832dnewjernrr43n5 -> Origin file name | Size | Access date | Owner user | smth else
После этого вы средствами приложения сможете /userfiles/akaldygulov@gmail.com/Pretty_image.png
перенаправлять на /files/adc/dcf/adcf832dnewjernrr43n5.png
/share/adcf832dnewjernrr43n5/Pretty_image.png
проверять доступ и снова перенаправлять на /files/adc/dcf/adcf832dnewjernrr43n5.png