Примечание. Возможно, мне не хватает простого решения этой проблемы.Я относительно новичок в программировании.Любой совет приветствуется.
Проблема : небольшая группа людей (~ 3-5) хочет, насколько это возможно, автоматизировать регистрацию загруженных файлов.файлы в соответствующих папках.Файлы будут загружены в общую папку загрузок.Файлы в этой папке загрузок будут отсортированы в большую структуру общих папок в соответствии с их типом файла, URL-адресом, с которого был загружен файл, и так далее, и так далее.Эти файлы хранятся на общем сервере, и фактическая сортировка будет выполняться с помощью какого-либо сценария оболочки, выполняющегося на самом сервере.
Хотя есть некоторые утилиты, которые делают это (например, Maid *)1010 *), они не делают все, что я хочу, чтобы они делали.У горничной, например, нет способа получить URL загрузки файла в Linux.Кроме того, он написан на Ruby, чего я хотел бы избежать.
Самым большим камнем преткновения является поиск способа получения URL-адреса загруженного файла, который можно передать в сценарий оболочки.Первоначально я думал, что это можно сделать через getfattr , который получит расширенные атрибуты файла.Однако, к сожалению, хотя Chromium сохраняет URL загрузки файла в качестве расширенного атрибута, Firefox, похоже, не делает то же самое.Так что полагаться на расширенные атрибуты, похоже, не стоит и речи.
Однако Firefox сохраняет загружаемые «метаданные» в файле Plaz.sqlite , в двух отдельных таблицах - moz_annos и moz_places .Вдохновленный этим, я посвятил себя созданию расширения Firefox, которое записывает всю информацию о загруженном файле в базу данных SQLite downloads.sqlite на нашем сервере после завершения указанной загрузки.Это включает в себя URL, MIME-тип и т. Д. Загруженного файла.
Идея состоит в том, что с этими данными сервер может запустить сценарий оболочки, который выполняет некоторую детальную сортировку загруженного файла в наш общий ресурс.файловая система.
Однако, Я изо всех сил пытаюсь найти стабильный, надежный и переносимый способ «запуска» сценария, который фактически перемещает файлы, а также передачи информации об этих файлах всценарий, чтобы он мог их соответствующим образом отсортировать.
Есть несколько способов, которыми я думал, что мог бы пойти по этому поводу.Я не уверен, какой метод является наиболее подходящим:
1) Просмотр папки загрузок
Этот метод будет отслеживать изменения в общем каталоге загрузок, а затем использоватьимя файла загруженного файла для запроса downloads.sqlite , получение соответствующей строки, а затем, наконец, передача атрибутов файла в скрипт bash, который сортирует указанный файл.
Трудности : Поиск способа надежного сопоставления загруженного файла с соответствующей записью в базе данных.Файлы могут иметь одинаковое имя загрузки, но их нужно сортировать по-разному, например, если они были загружены с другого URL-адреса.Кроме того, я хотел бы получить дополнительные атрибуты, например , независимо от того, был ли файл загружен в режиме инкогнито .
2) Создать вспомогательный файл «Помощник»
После события загрузки файла расширение создает текстовый файл «Помощник», который является именем файла +некоторый маркер, который содержит дополнительный атрибут файла:
/Downloads/
mydownload.pdf
mydownload-downloadhelper.txt
Затем сервер может наблюдать за созданием файла .txt в каталоге загрузок и запустить необходимый сценарий оболочки из этого.
Трудности : Хотя это позволяет избежать использования базы данных SQlite, оно кажется довольно изящным и хакерским, и я вижу множество способов, с помощью которых этот метод просто сломался бы или не работал.
3) Смотреть базу данных SQlite
Этот метод выполняет запись в общую базу данных SQlite downloads.sqlite на сервере.Затем, каким-то способом, наблюдайте за новой вставкой строки в эту базу данных.Это может быть либо путем наблюдения базы данных sqlite для нового INSERT на таблице, либо с помощью триггера sqlite на INSERT, который запускает сценарий bash и передает информацию о загрузке в сценарий оболочки.
Трудности : кажется, нет простого способа посмотреть базу данных SQlite для вставки новой строки, а триггер в SQlite, похоже, не может запуститьвнешний скрипт / программа.Я искал высоко и низко метод выполнения любого из этих двух процессов, но я изо всех сил пытаюсь найти любой документированный способ сделать это, который я могу понять.
Мне бы хотелось:
- Некоторые отзывы о том, какой из этих методов подходит, или есть ли более подходящий метод, который я пропускаю.
- Пример системы / программы, которая делает что-то похожее на это.
Большое спасибо заранее.