Здравствуйте, есть форма с возможностью отправки текста и загрузки некоторого количества файлов, проблема заключается в том, что файлы загружаются на сервер, до нажатия кнопки отправки ( в форме, показывая тем самым превьюшки файлов ) в следствии чего id записи формы еще не создан, как лучше хранить эти файлы, чтобы после нажатия отправки прикрепить их к сообщению формы ?
Наиболее похожий способ загрузке в vk.com там загружаются фото, аудио, видео, до отправки сообщения.
На ум приходит пока 2 варианты:
1. Создавать заранее пустую запись для получения id и потом прикреплять загруженные файлы к уже созданному id-шнику, при нажатии кнопки отправить, записывать переданные данные и менять флаг в записи для ее публикации.
2. Временно хранить файлы в какой - либо папке, и записывать их в новую таблицу бд, где будут данные к какому новому сообщению относятся загруженные файлы... Новость, переписка и так далее...
Минусы:
1. Для каждой переписки с каждым человеком или для каждой новой новости будут созданы пустые строки в бд с неактивным флагом.
2. Создание новой таблицы бд. Так-же пользователь не сможет создать 'новую' запись, к любой записи уже будут прибиты превьюшки новостей. Пример. Писал новость А, затем решил отдохнуть или подобрать материал, и временно написать новость Б, но файлы будут привязаны к любой не опубликованной новости, будь то А или Б, до тех пор пока не будет нажата кнопка отправить и все файлы не привяжутся к какой-то конкретной новости...
Возможно, есть свои идеи ? Поделитесь, заранее спасибо.
А если пользователь обновит сессию ? Или зайдет с другого компа ? Да и хранить в сессии имена файлов с id каждого сообщения мне кажется затратно... Навскидку у каждого диалога пользователя в сессии будет +1 массив, а сколько у вас диалогов например в вк ? 50 ? Это не критика, это скорее вопрос, обоснованы ли мои переживания или не париться и все пихать в сессии ?
Сейчас в этом варианте меня смущает количество массивов данных в сессии. С другой стороны пример с диалогами не означает что со всеми 50 я буду общаться одновременно, а вот человек 10 максимум это возможно... Не много ли будет в сессию засунуть 10 массивов с id и имением файла ?
Сохраняйте файлы сразу в БД. Добавьте в таблицу файлов флаг processed. Сделайте его по умолчанию false. Когда пользователь успешно отправит форму, изменяйте флаг processed на true для файлов, идентификаторы которых переданы в форме.
Далее кроном периодически удаляйте файлы с флагом processed старше определенного времени