Реализация файловой системы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Drugpunker
Сообщения: 93
Зарегистрирован: 2014.08.13, 19:44

Реализация файловой системы

Сообщение Drugpunker » 2020.02.13, 12:16

Доброго дня всем.
Ищу правильный подход.
Ситуация такова, пользователи загружают изображения, заполняя форму.
Форма, допустим состоит из поля Title, текстового поля для ввода обращения и поля загрузки изображений.

Как правильно организовать хранение фото?

Логика такая:
1. Пользователь открывает форму
2. Набирает текст
3. Выбирает изображение на раб.столе и загружает его.
Как здесь можно сделать? К чему привязать именование папки с изображениями?
Наверно это должно выглядеть так imgsRootFolder/userName/curYear/requestTitle/img_1, img_2

И тут появляется ряд проблем:
Загрузка изображений по-принципу WYSIWYG. То есть картинка появляется в форме ещё до отправки самой формы.

a) Папка /requestTitle/ Будет создана, если изображение пройдёт валидацию. Но как передать этот самый requestTitle из текстового поля в класс обработки изображения?
b) Если папка с изображениями создана, а форма в итоге не отправлена, как удалить эту папку, как не нужную?
с) Если папка создана, но пользователь изменил инфу в поле Title, как быть с папкой? Сравнивать версии и переименовывать?

Может быть вобще не следует привязываться к requestTitle, а привязаться к некому Id?

Вобщем как правильнее и логичнее сделать такое?

someweb
Сообщения: 551
Зарегистрирован: 2017.03.09, 10:12

Re: Реализация файловой системы

Сообщение someweb » 2020.02.13, 13:23

Сделайте табличку для изображений
id, user_id, title, upload_date, path
А в файловой системе храните как удобно.
И тут появляется ряд проблем:
Загрузка изображений по-принципу WYSIWYG. То есть картинка появляется в форме ещё до отправки самой формы.

a) Папка /requestTitle/ Будет создана, если изображение пройдёт валидацию. Но как передать этот самый requestTitle из текстового поля в класс обработки изображения?
Вставлять картинку в форму до отправки надо через js, requestTitle отправится на сервер вместе с картинкой.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.

Drugpunker
Сообщения: 93
Зарегистрирован: 2014.08.13, 19:44

Re: Реализация файловой системы

Сообщение Drugpunker » 2020.02.13, 14:29

someweb писал(а):
2020.02.13, 13:23
Сделайте табличку для изображений
id, user_id, title, upload_date, path
А в файловой системе храните как удобно.
И тут появляется ряд проблем:
Загрузка изображений по-принципу WYSIWYG. То есть картинка появляется в форме ещё до отправки самой формы.

a) Папка /requestTitle/ Будет создана, если изображение пройдёт валидацию. Но как передать этот самый requestTitle из текстового поля в класс обработки изображения?
Вставлять картинку в форму до отправки надо через js, requestTitle отправится на сервер вместе с картинкой.
Это всё известно.
Картинка, после выборки с компа, отображается в форме. Форма ещё не отправлена.
Чтобы картинка отобразилась, она должна быть положена в директорию на сервере.
Соответственно и вопрос о том, как правильно эту директорию создавать.

Как организовать файловую систему?
Наверно это должно выглядеть так imgsRootFolder/userName/curYear/requestTitle/img_1, img_2.
То есть имя каждой поддиректории должно строиться по принципу Юзер/Год/Имя обращения/img_1, img_2
Как передавать в модель это самое Имя обращения? Или же есть какое-то иное, более логичное решение именования с привязкой к Юзеру и году?

yiiliveext
Сообщения: 867
Зарегистрирован: 2019.08.13, 01:49

Re: Реализация файловой системы

Сообщение yiiliveext » 2020.02.13, 14:46

Превью можно делать без загрузки файла на сервер https://stackoverflow.com/questions/445 ... s-uploaded

Файлы можно хранить так
$newFileName = md5($username . $filename . $time); // fba8255e8e9ce645522455f3e1561e53.jpg
Сохраняем в папку imgsRootFolder/fb/a8/fba8255e8e9ce645522455f3e1561e53.jpg
В базе сохраняем оригинальное и новое имя файла, айди записи прописываем в соответствующей таблице для связи с заявкой.

Ответить