#php #mongodb
#php #mongodb
Вопрос:
Я работаю над веб-приложением, которое проводит инвентаризацию ваших домашних предметов. Я на 90% готов, за исключением того, что теперь мне нужно придумать способ экспорта фотографий, если пользователь того пожелает. Мне удалось экспортировать элементы в файл CSV, но что в этом хорошего, если они не могут получить свои фотографии? В настоящее время я использую MongoDB для серверной части, но независимо от того, как я их храню, мне нужен способ, при котором пользователь нажимает кнопку «Экспортировать фотографии», и она сжимается в один файл для загрузки пользователем.
Меня беспокоит только то, что, если они сохранили сотни фотографий?
Ответ №1:
Чтобы избежать сбоев в вашем php-процессе, я бы рекомендовал вам выгружать файлы из MongoDB один за другим во временный каталог файловой системы, а затем использовать exec
в сочетании с tar
или zip
, чтобы превратить это в сжатый архив, который вы отправляете пользователю.
Конечно, это может закончиться довольно серьезной DDoS-атакой вашего сайта, поэтому вам лучше написать это осторожно, т. Е. Если у пользователя более 100 изображений, использование очереди с Gearman или какого-нибудь сервера RabbitMQ может быть хорошей вещью, и тогда вы могли бы сказать им, что они получат электронное письмо, как только будет готова ссылка для скачивания их архива или что-то в этом роде? Я полагаю, экспортировать все ваши фотографии не должно быть ежедневным делом, поэтому это может быть приемлемо.
Комментарии:
1. Я бы определенно заглянул в Gearman, и вы правы, это может привести к беспорядку, и последнее, чего я хочу избежать, — это когда пользователь нажимает так, как будто завтра не наступит. В конечном итоге я могу сделать это ручным процессом. Вероятность того, что кому-то понадобится загрузить весь архив, невелика, но если они нужны пользователю, я бы не возражал сделать это вручную и предоставить ссылку для загрузки.
Ответ №2:
Вы можете записать их последнюю попытку экспортировать архив и разрешать это только раз в час или около того (они могут сделать что-то не так в первый раз, поэтому всегда рекомендуется не устанавливать слишком длительный период истечения срока действия).
Комментарии:
1. Верно, но чем больше я думаю об этом, тем с большим количеством проблем я могу столкнуться. Я хотел бы сделать весь сайт самодостаточным, но какой ценой? Я просмотрел некоторые сайты моих конкурентов, и многие из них не предлагают возможности экспорта фотографий. Это то, что я хочу обсудить, но, возможно, мне следует просто выпустить сейчас и побеспокоиться об этом позже. 😉