Важно
Видеоролики сейчас находятся в процессе обновления. Они могут частично не согласовываться с актуальным состоянием n8n.
В этом уроке вы узнаете, откуда данные появляются в n8n и как они могут перемещаться
Практика
Вам предстоит построить папку, которая будет создавать каталог по датам из загружаемых в неё картинок:
- При загрузке картинки в папку проверяется, есть ли папка вида YYYY-MM-DD Images, если нет, то она создается
- Файл обрабатывается — на него ставится метка с надписью
- Обработанный файл сохраняется в новой папке
- Исходный файл удаляется
Важно! . Если вы загрузите в папку несколько файлов, обработается только один. Это связано с действием узла-триггера, который реагирует только на один файл.
Перед началом создайте где-либо на Гугл-диске папку Storage — в неё вы будете скидывать файлы для обработки. И еще — сразу откройте в дополнительной вкладке Корзину Гугл-диска. В процессе отладки вы будете удалять папки “сегодняшнего дня” — их надо удалять и из корзины тоже.
Упражнения
- Триггер. Добавьте узел Google Drive Trigger, установите в нем проверяемый интервал 1 минута и срабатывание на изменениях в определенной папке (Changes Involving a Specific Folder). В Folder укажите From list и в списке выберите вашу папку. Пусть триггер прослушивает событие “Создание файла” (File Created).
- Скачивание бинарных данных. Теперь, когда процесс пошел, надо получить из загруженного файла бинарные данные. За это отвечает узел Google Drive с действием File → Download, а выбор File сделайте By ID и перетащите id из предыдущего узла. Назовите узел Скачать файл.
- Дата загрузки файла. Чтобы правильно назвать папку каталога, надо извлечь дату загрузки файла в формате YYYY-MM-DD. Используйте для этого Date & Time-узел для форматирования c выходным свойством date
- Список “сегодняшних” папок. Чтобы узнать, надо ли создавать папку с сегодняшней датой, надо узнать, если ли уже такая папка. Для этого используйте узел Гугл-диска в режиме
File→Listи максимальным лимитом в 1000.
И главное — Фильтр. Узел проверяет, содержится ли (Contains) в получаемых папках и файлах название сегодняшней папки вида YYYY-MM-DD Images. Для этого надо использовать выражение: дата по входящему свойству date и дописанное слово “ Images”. Назовите узел Показать папки.
Важно! Эта проверка показывает и папки в корзине, если они имели то же название и были удалены из папки Storage. Поэтому мы в качестве опции добавим отображение полей (Fields), и выберем ID, Name, Trashed.. Последнее поможет нам отбросить папки из корзины - Избавимся от удаленных папок. Нам нужен специальный узел, который будет отфильтровывать удаленные папки. Дальше мы будем пропускать либо найденную неудаленную папку, либо пустой поток — чтобы он просигналил нам создать эту папку.
Для этого надо поставить узел IF и установить условие, что trashed ложно. А также включите настройкуAlways Output Data. Тогда если есть “живая” папка, то она пойдет дальше, а если нет — то дальше пойдет пустой поток. Назовите узел Не пропустить удаленные папки. - Надо ли создавать папку?. Скопируйте предыдущий IF, снимите настройку
Always Output Dataи подключите его к верхнему выходу предыдущего. Теперь он будет определять — будем мы создавать новую папку (нижний выход) или она уже есть. Назовите папку Папка существует? - Если папки не было. Поскольку в этом случае файл загружается первый раз, то надо создать сегодняшнюю папку. Добавьте узел Гугл-диска с режимом “Папка” — “Создать”, а в качестве имени возьмите опять данные из Date & Time и добавьте “ Images”. В ID качестве родительской папки укажите id папки Storage. Назовите папку Создать папку.
- Добавим узел No Op. В этом узле должны оказаться данные папки, не важно, была она создана только что или Этот пустой узел собирает в себя стрелки из обоих случаев – если папки не было, и если ее только что создали. Уприте в него стрелки из предыдущих двух узлов. Назовите узел Информация о папке.
- Присоединение бинарных данных. По пути из-за узла Показать папки у нас потерялись данные с картинкой. Их надо вытащить, просто протянув еще одну ветку из Скачать файл в узел Merge (нижний вход). Чтобы стрелка не визуально наложилась на узлы, можете сначала вывести эту ветку в узел No Operations, его расположить снизу-справа Скачать файл, а уже из него по прямой вывести в Merge.
В верхний вход Merge выведите данные из Информация о папке. Тип слияния нужен по позиции. В Clash Handling надо выбрать Prefer Input 1 Version, чтобы дальше пошла информация о папке для изображения, а не о закаченном файле (она идет из узла Скачать файл). Назовите узел Добавить изображение. - Преобразование изображения. Следующий узел будет Edit Image, который добавит сначала оранжевый прямоугольник, а потом надпись. Параметры посмотрите внутри страницы Notion. Назовите узел Добавить надпись.
- Создание файла в “сегодняшней” папке. Теперь, имея обработанную картинку, её можно легко сохранить в папке каталога. Опять вам поможет узел Google Drive в режиме Файл — Загрузка. Бинарные данные должны быть включены.
В качестве имени добавьте спереди к названию файла из триггера слово “обработано”, например, должно получиться обработано_bird.jpg. Имя файла возьмите name из триггера.
Нужно также указать id родительской папки — конечно, это будет id сегодняшней папки.
Назовите узел Загрузить файл. - Удаление оригинала. Наконец, когда копия сохранена в каталоге, исходник надо удалить, также через узел Гугл-диска, операцию File – Delete. Здесь надо правильно указать id, взятый из триггера. Назовите узел Удалить исходный файл.
Важно! Как только файл будет удалён, вы не сможете запускать триггер в принудительном режиме. Для этого придется сначала загрузить файл на обработку, потом можно выполнять процесс. Иначе триггер покажет ошибку. - Тестирование. Если всё работает, как надо, то загрузите файл и выполните workflow. Файл исчезнет, появится (если не было) папка сегодняшнего дня и обработанный файл в нём.
- Сохраните и активируйте процесс, Теперь триггер будет реагировать автоматически
Отметьте все решенные задачи на странице шаблона упражнений Google Drive