Как хранить и показывать локальные файлы в CRM (frontend + backend)?
Здравствуйте. Вопрос для расширения кругозора.
Подскажите статьи, или идеи, как локально хранят файлы во всяких CRM, ERP, и т.д. А так же позволяют работать с файлами на фронте.
У меня сейчас сделано достаточно просто. Пользователь на фронте дает задачу на создание файла (например создать счет для заказа). Бек генерирует фаил, и кладет его в папку на общем диске, название папки равно ID заказа. (.../ORDERS/124/счет.xlsx). После чего пользователь может открыть фаил у себя на компьютере через фронт, так как файлы хранятся локально на общем диске. Сделано это немного коряво, через URL Protocol + скрипт powershell, на каждом компьютере.
У этого способа есть недостатки (как по мне).
1) Бэкенд не знает какие файлы у него есть, так как после создания файла он просто кладет его в папку.
2) Так же не получается узнать, какие файлы уже были созданы (Например для заказа это счет, накладная, ТТН, и т.д.), и не получается сделать пометку для пользователя (например "Для отгрузки заказа не хватает таких-то файлов")
3) Не известно, кто создал этот фаил, когда создал, когда редактировал, когда удалили фаил (а был ли он создан вообще)
4) Сам способ открытия локального файла из браузера, сделано через URL Protocol + скрипт powershell. Вроде как коряво, но в принципе работает.
Но есть и удобства.
1) Открытие файлов в один клик из браузера, в привычной тебе программе (Word, Excel, PDF reader, и т.д.)
2) Можно просто открыть папку с файлами, и оттуда скопировать, переслать, переименовать фаил.
3) Редактирование файлов на лету. (Открыл - изменил - Нажал кнопку сохранить)
4) Печать файлов, так же открыл фаил и нажал на кнопку печати.
5) Так же удобно складывать все подряд файлы в папку. Например открыл папку с работником, и накидал туда файлы со сканами документов. А потом их можно легко просмастривать.
Вроде все это работает. Но все это выглядит костыльно и коряво), хотелось бы узнать как это делают серьезные ребята. Слышан что можно хранить файлы в БД. Но плохо себе представляю как это делается. Особенно открытие, редактирование, печать файла.
Вопрос создан с целью просветления знаний.
Хранить файлы в БД - это либо очень узкий кейс с файлами меньше 4 кб, либо некомпетентность.
В БД хранится информация о файлах.
Сами файлы складываются в папочку storage под хэшированным именем, а в БД хранится:
- их настоящее имя и расширение (возможно, тип)
- доступ (публичный или через скрипт после авторизации)
- принадлежность (не автор, а объект в бизнес-логике, которому этот файл принадлежит)
- ну, и та техническая информация, которая требуется (вот тут автор, время, правки etc.)
Соответственно, для фронта бэком генерируются ссылки на нужные файлы, публичные - прямые, непубличные - на роутер, который их обработает.
Если я правильно понял. То в таком ключе будет не удобно отправить фаил по почте например. Сейчас можно открыть папку с файлами, и просто перетащить нужный фаил в письмо для отправки. Так же не получится просто перетащить файлы в папку, что бы они потом отображались в системе. Так как бэк не будет знать о них.
Александр Рублев, если вы по своей CRM бродите файловым менеджером, у вас не CRM, а бардак.
Отправка файлов CRM по почте должна осуществляться формой "отправить выделенные файлы по почте контрагента прикрепленными к заполненному указанными данными шаблону" на странице объекта, которому они принадлежат. Без всяких там перетаскиваний.
Александр Рублев, ваши требования к "удобно" больше напоминают не CRM, а онлайн-офис, например.
Все вот это "пользователь командует создать файл, потом шляется мышкой по серверу, чтобы послать его почтой" - просто пережитки докомпьютерных времен. Менеджер должен зайти в конкретный договор с конкретным контрагентом, выбрать период, за который нужно сформировать файл, и одной кнопкой его отправить. Или, если ему только посмотреть - получить сгенерированный PDF в соседнем окошке (получив по AJAX содержимое и воткнув его в dataurl, например).
Adamos, Вы правы, у нас что то, типо учетной системы на предприятии (не знаю как правильно называются такие системы). Пример с почтой достаточно живой. Например сейчас у одного покупателя, нужно при отгрузке товара отправлять коды честного знака на почту менеджеру. Или же загружать коды маркировки в документы EDI.
В браузере на второй вкладке, можно открыть PDF фаил. Но вот word или excel нельзя к сожалению.
Александр Рублев, неважно, как называется и для чего предназначена. Главный принцип - вся изменяющаяся информация должна быть в базе, а не в документах. Офисные форматы - для ввода, если уж инфа в них, и вывода, кому понадобилось. Те же ЧЗ, например, у меня в одном месте загружаются из Ёкселя и привязываются к конкретным карточкам ВБ, чтобы потом видеть, что куда пошло и нет ли дублей.
Чтобы открывать офисные форматы в браузере, нужен онлайн-офис. Collabora, например. Но это, на самом деле, тупик - если повторять рабочий процесс по до-онлайновой парадигме, проект быстро начнет сопротивляться развитию и превратится просто в неудобный (из-за работы в браузере) офис.