Перейти к содержанию

Интеграция Dropbox и n8n: загрузка файлов, папки и контроль дублей

Обновлено: 2026-05-30

AI summary: Problem/Solution-гайд по Dropbox и n8n: как загружать вложения, отчёты и документы в правильные папки без дублей, сломанных путей и утечки персональных данных.
Готовый blueprint для внедрения

Импортируйте JSON в n8n, замените credentials, URL API, IDs, папки, каналы, лимиты и правила под вашу инфраструктуру.

Проблема: Dropbox удобно использовать как облачную папку для документов, но простая загрузка из n8n часто создаёт дубли, ломает имена файлов и складывает персональные данные в общий каталог.

Решение: Production-связка Dropbox и n8n нормализует путь, строит file key по источнику и checksum, проверяет размер/тип файла, выбирает папку по бизнес-правилу и пишет результат обратно в CRM, таблицу или задачу.

Схема интеграции Dropbox и n8n для загрузки файлов без дублей
Схема показывает путь файла от источника до Dropbox с проверкой размера, нормализацией пути и dedupe.

Проблема: почему простая интеграция создаёт дубли и ручной хаос

Интеграция Dropbox чаще всего нужна не “для загрузить файл”, а для процесса: сохранить вложения из Gmail, счета из CRM, ежедневные отчёты, экспорт заказов или бэкап небольших документов. Без правил путь быстро превращается в хаос вида /uploads/new/file(17).pdf.

Главная боль — повторная обработка. Одно письмо может прийти в треде несколько раз, CRM может переотправить документ, а scheduled workflow может перечитать те же файлы. Поэтому важны checksum, stable path, журнал обработанных файлов и понятная структура папок.

Архитектура workflow для n8n

БлокЗадачаProduction-проверка
Source eventполучает файл из Gmail, CRM, webhook или расписанияесть filename, mime_type, size и source_id
Validate fileпроверяет тип, размер и обязательный контекстнет пустых или опасных файлов
Build Dropbox pathсобирает безопасный путь и имя файланет ../, спецсимволов и коллизий
Check dedupeсравнивает checksum или source_id+filenameповтор не создаёт новый файл
Upload to Dropboxзагружает файл в целевую папкуOAuth credential и scopes ограничены
Save file linkвозвращает shared/path link в CRM или таблицувиден результат операции

Dropbox-путь должен строиться до загрузки и быть детерминированным. Тогда повторный запуск обновит тот же объект или будет безопасно пропущен.

Контракт входных данных

{
  "source": "gmail",
  "source_id": "msg-18f9a2",
  "folder": "invoices/2026/05",
  "filename": "invoice-10492.pdf",
  "mime_type": "application/pdf",
  "size_bytes": 284112,
  "checksum": "sha256:6b5f...demo",
  "customer": "ООО Пример",
  "deal_id": "crm-5581"
}

Для production нужен не только binary file, но и metadata: источник, исходный message/task id, имя файла, тип, размер, checksum и бизнес-контекст для папки.

Code Node: нормализация, mapping и guard-условия

const src = $json.body ?? $json;
const original = String(src.filename ?? 'file.bin').trim();
const ext = (original.match(/\.[a-z0-9]{1,12}$/i)?.[0] ?? '').toLowerCase();
const base = original.replace(/\.[a-z0-9]{1,12}$/i, '')
  .normalize('NFKD')
  .replace(/[^\w\-а-яА-Я]+/g, '-')
  .replace(/-+/g, '-')
  .replace(/^-|-$/g, '')
  .slice(0, 80) || 'file';
const folder = String(src.folder ?? 'uploads')
  .replace(/\/g, '/')
  .replace(/\.\./g, '')
  .replace(/\/+/g, '/')
  .replace(/^\/+|\/+$/g, '');
const size = Number(src.size_bytes ?? 0);
if (size <= 0) throw new Error('Empty file payload');
if (size > 50 * 1024 * 1024) throw new Error('File is too large for this workflow');
const safeName = `${base}${ext}`;
const sourceId = String(src.source_id ?? '').trim();
const checksum = String(src.checksum ?? '').trim();
return [{ json: {
  dropbox_path: `/${folder}/${safeName}`,
  dedupe_key: `dropbox:${sourceId || checksum || safeName}`.toLowerCase(),
  filename: safeName,
  mime_type: src.mime_type ?? 'application/octet-stream',
  source: src.source ?? 'unknown',
  deal_id: src.deal_id ?? '',
  uploaded_at: new Date().toISOString()
}}];
Почему имя файла нельзя брать как есть

Письма и формы часто присылают файлы с пробелами, кириллицей, повторяющимися именами и опасными последовательностями. Нормализация пути защищает Dropbox от хаотичной структуры и path traversal.

Готовый workflow JSON: скачать и импортировать

Скачать готовый workflow JSON Скачать тестовый payload

{
  "name": "Nodbot - Dropbox file upload with path normalization",
  "nodes": [
    {
      "name": "Webhook file input",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Получить metadata файла"
    },
    {
      "name": "Validate and normalize path",
      "type": "n8n-nodes-base.code",
      "purpose": "Проверить размер, тип и путь"
    },
    {
      "name": "Check file dedupe",
      "type": "n8n-nodes-base.postgres",
      "purpose": "Найти повтор по source_id или checksum"
    },
    {
      "name": "Upload to Dropbox",
      "type": "n8n-nodes-base.dropbox",
      "purpose": "Загрузить binary в Dropbox"
    },
    {
      "name": "Save Dropbox link",
      "type": "n8n-nodes-base.dropbox",
      "purpose": "Вернуть ссылку в CRM или таблицу"
    },
    {
      "name": "Respond to source",
      "type": "n8n-nodes-base.respondToWebhook",
      "purpose": "Подтвердить обработку"
    }
  ],
  "connections": "Webhook file input → Validate and normalize path → Check file dedupe → Upload to Dropbox → Save Dropbox link → Respond to source"
}

Пошаговая настройка связки

  1. Создайте отдельное Dropbox App credential с минимальными правами к нужной папке.
  2. Импортируйте workflow JSON и проверьте передачу binary data между нодами.
  3. Настройте правила папок: invoices, contracts, reports, backups или customer-id.
  4. Добавьте dedupe storage по source_id/checksum.
  5. Отправьте один и тот же файл дважды и убедитесь, что дубликат не создаётся.

Тесты перед production

curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-dropbox-n8n-file-upload-sync" \
  -H "Content-Type: application/json" \
  --data @integration-dropbox-n8n-file-upload-sync-payload.json
  1. Повторный payload не создаёт дубль и возвращает тот же output key.
  2. Некорректный mapping останавливается до запроса к внешнему API.
  3. Пустые необязательные поля не ломают workflow.
  4. Ошибка API уходит в alert или DLQ с безопасным payload.
  5. Execution data не содержит секретов, токенов и лишних персональных данных.

Production-риски

  • Файл загружается без контекста. Потом невозможно понять клиента, сделку и источник документа.
  • Нет проверки размера. Большой файл может сорвать execution или упереться в лимиты API.
  • Путь строится из пользовательского ввода. Нужна очистка ../, slash и спецсимволов.
  • Ссылка создаётся публичной по умолчанию. Для персональных данных нужен ограниченный доступ.
  • Нет журнала upload. Повторный запуск создаёт invoice(2).pdf вместо контролируемого upsert.
Карточка результата Dropbox upload с файлом, папкой и dedupe key
Пример результата: документ сохранён в правильную папку, а ссылка возвращена в CRM без дубля.

Критерии готовности

  1. Путь и имя файла нормализуются до Dropbox upload.
  2. Dedupe key использует source_id, checksum или другой стабильный идентификатор.
  3. Binary data проходит тест на реальном PDF/CSV/изображении.
  4. Публичные ссылки создаются только по явному правилу.
  5. Результат upload сохраняется обратно в CRM, таблицу или задачу.
Нужно разложить документы по папкам без ручной сортировки?

Nodbot настроит Dropbox + n8n: загрузку вложений, нормализацию путей, dedupe по checksum, ссылки доступа, журнал файлов и интеграцию с CRM или таблицами.

Обсудить Dropbox-интеграцию