Pular para conteúdo

FTP_DELETE - Apagar Arquivo no Servidor FTP

O que é este Node?

O FTP_DELETE é o node responsável por remover arquivos de um servidor FTP remoto. Permite limpar arquivos processados, obsoletos ou temporários.

Por que este Node existe?

Manter servidores FTP organizados e limpos é fundamental para operação eficiente. O FTP_DELETE existe para:

  1. Limpar Arquivos Processados: Remover arquivos já importados para evitar reprocessamento
  2. Gerenciar Espaço: Apagar arquivos antigos para liberar espaço em disco
  3. Manutenção Automatizada: Remover temporários e logs obsoletos automaticamente
  4. Ciclo de Vida: Implementar políticas de retenção de dados

Como funciona internamente?

Quando o FTP_DELETE é executado, o sistema:

  1. Conecta ao FTP: Estabelece conexão com servidor usando credenciais
  2. Valida Caminho: Confirma que caminho do arquivo foi fornecido
  3. Executa Remoção: Envia comando DELE (delete) ao servidor FTP
  4. Aguarda Confirmação: Espera servidor confirmar remoção
  5. Registra Timestamp: Captura momento da remoção
  6. Se falhar: Retorna erro (arquivo não existe, sem permissão, etc)
  7. Se sucesso: Confirma remoção com caminho e timestamp

Código interno (ftp-executor.service.ts:357-369):

private async deleteFile(client: FTP.Client, data: FTPNodeData): Promise<any> {
  const remotePath = data.remoteFilePathDelete!;

  this.logger.debug(`Deleting file: ${remotePath}`);

  await client.remove(remotePath);

  return {
    success: true,
    deletedPath: remotePath,
    deletedAt: new Date().toISOString()
  };
}

Quando você DEVE usar este Node?

Use FTP_DELETE sempre que precisar de remover arquivos do servidor FTP:

Casos de uso

  1. Pós-Processamento: "Apagar CSV após importar pedidos com sucesso"
  2. Limpeza Periódica: "Remover backups com mais de 30 dias todas as semanas"
  3. Gerenciar Fila: "Apagar arquivo da pasta /incoming/ após processar"

Quando NÃO usar FTP_DELETE

  • Arquivos Importantes: Não apague sem backup ou confirmação
  • Histórico Necessário: Se precisa manter auditoria, mova ao invés de apagar (use FTP_RENAME)
  • Sem Certeza: Se não tem certeza se arquivo foi processado, não apague

Parâmetros Detalhados

remoteFilePathDelete (string, obrigatório)

O que é: Caminho completo do arquivo no servidor FTP que será removido.

Padrão: Nenhum (obrigatório)

Flow completo para testar:

{
  "name": "Teste FTP Delete - RemotePath",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pedir Arquivo",
        "parameters": {
          "message": "Qual arquivo apagar? (Ex: /temp/old_file.txt)",
          "variableName": "arquivo_apagar"
        }
      }
    },
    {
      "id": "ftp_1",
      "type": "ftp",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Apagar Arquivo",
        "parameters": {
          "host": "ftp.example.com",
          "username": "user",
          "password": "pass",
          "operation": "delete",
          "remoteFilePathDelete": "{{arquivo_apagar}}",
          "outputVariable": "delete_result"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Arquivo apagado: {{delete_result.deletedPath}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "ftp_1" },
    { "source": "ftp_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite "/temp/test.txt". Arquivo será removido do servidor.

outputVariable (string, opcional)

O que é: Nome da variável onde resultado da remoção será armazenado.

Padrão: "ftp_result"

Flow completo para testar:

{
  "name": "Teste FTP Delete - OutputVariable",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "ftp_1",
      "type": "ftp",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Apagar com Variável Customizada",
        "parameters": {
          "host": "ftp.cleanup.com",
          "username": "admin",
          "password": "pass",
          "operation": "delete",
          "remoteFilePathDelete": "/logs/old_log.txt",
          "outputVariable": "remocao_log"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Detalhes",
        "parameters": {
          "message": "Arquivo: {{remocao_log.deletedPath}}\nRemovido em: {{remocao_log.deletedAt}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "ftp_1" },
    { "source": "ftp_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Resultado em {{remocao_log}} contém caminho e timestamp da remoção.

Parâmetros

Campo Tipo Obrigatório Descrição
host string Sim Endereço do servidor FTP
port number Não Porta TCP (padrão: 21)
username string Sim Nome de usuário
password string Sim Senha
secure boolean Não FTPS - SSL/TLS (padrão: false)
operation string Sim Deve ser "delete"
remoteFilePathDelete string Sim Caminho do arquivo a remover
outputVariable string Não Variável de resultado (padrão: ftp_result)

Exemplo 1: Apagar Arquivo Após Download Bem-Sucedido

Objetivo: Baixar arquivo e então removê-lo do servidor

JSON para Importar

{
  "name": "Download e Delete",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "ftp_download",
      "type": "ftp",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Baixar Pedidos",
        "parameters": {
          "host": "ftp.fornecedor.com",
          "username": "empresa",
          "password": "pass123",
          "operation": "download",
          "remoteFilePathDownload": "/incoming/pedidos.csv",
          "localFilePathDownload": "/tmp/pedidos.csv",
          "outputVariable": "download_info"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar Download",
        "parameters": {
          "message": "✅ Arquivo baixado: {{download_info.size}} bytes"
        }
      }
    },
    {
      "id": "ftp_delete",
      "type": "ftp",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Apagar do Servidor",
        "parameters": {
          "host": "ftp.fornecedor.com",
          "username": "empresa",
          "password": "pass123",
          "operation": "delete",
          "remoteFilePathDelete": "/incoming/pedidos.csv",
          "outputVariable": "delete_info"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar Limpeza",
        "parameters": {
          "message": "🗑️ Arquivo removido do servidor!\nProcessamento completo."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "ftp_download" },
    { "source": "ftp_download", "target": "message_1" },
    { "source": "message_1", "target": "ftp_delete" },
    { "source": "ftp_delete", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ✅ Arquivo baixado: 1048576 bytes
Sistema: 🗑️ Arquivo removido do servidor!
Processamento completo.

Exemplo 2: Limpeza em Lote de Arquivos Antigos

Objetivo: Listar e apagar múltiplos arquivos obsoletos

JSON para Importar

{
  "name": "Limpeza em Lote",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "ftp_delete_1",
      "type": "ftp",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Apagar Arquivo 1",
        "parameters": {
          "host": "ftp.cleanup.com",
          "username": "admin",
          "password": "pass",
          "operation": "delete",
          "remoteFilePathDelete": "/temp/old_file_1.txt"
        }
      }
    },
    {
      "id": "ftp_delete_2",
      "type": "ftp",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Apagar Arquivo 2",
        "parameters": {
          "host": "ftp.cleanup.com",
          "username": "admin",
          "password": "pass",
          "operation": "delete",
          "remoteFilePathDelete": "/temp/old_file_2.txt"
        }
      }
    },
    {
      "id": "ftp_delete_3",
      "type": "ftp",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Apagar Arquivo 3",
        "parameters": {
          "host": "ftp.cleanup.com",
          "username": "admin",
          "password": "pass",
          "operation": "delete",
          "remoteFilePathDelete": "/temp/old_file_3.txt"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Resumo",
        "parameters": {
          "message": "🧹 Limpeza concluída!\n3 arquivos removidos do servidor."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "ftp_delete_1" },
    { "source": "ftp_delete_1", "target": "ftp_delete_2" },
    { "source": "ftp_delete_2", "target": "ftp_delete_3" },
    { "source": "ftp_delete_3", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🧹 Limpeza concluída!
3 arquivos removidos do servidor.

Resposta do Node

{
  "success": true,
  "data": {
    "ftp_result": {
      "success": true,
      "deletedPath": "/incoming/pedidos.csv",
      "deletedAt": "2025-01-15T10:30:00.000Z"
    },
    "operation": "delete",
    "host": "ftp.fornecedor.com",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "executionTime": 567,
  "logs": [
    "Deleted file: /incoming/pedidos.csv"
  ]
}

Boas Práticas

SIM:

  • Sempre baixe arquivo antes de apagar (download + delete)
  • Use CONDITION para verificar sucesso antes de apagar
  • Mantenha log dos arquivos apagados para auditoria
  • Implemente políticas de retenção claras (ex: apagar após 30 dias)
  • Teste em ambiente de homologação primeiro

NÃO:

  • Não apague arquivos sem ter certeza que foram processados
  • Não remova sem backup se dados forem críticos
  • Não use wildcards (* ou ?) - FTP_DELETE remove arquivo específico
  • Não apague diretórios com FTP_DELETE (use FTP_RMDIR)

Dicas

💡 Dica 1: SEMPRE baixe arquivo antes de apagar. Se download falhar, não execute delete.

💡 Dica 2: Para apagar múltiplos arquivos, use FTP_LIST + LOOP + FTP_DELETE.

💡 Dica 3: Operação é IRREVERSÍVEL. Arquivo apagado não pode ser recuperado do FTP.

💡 Dica 4: Se precisa manter histórico, use FTP_RENAME para mover para pasta /archive/ ao invés de apagar.

Próximos Nodes

FTP_DOWNLOAD - Baixar antes de apagar → FTP_RENAME - Mover ao invés de apagar → FTP_LIST - Listar arquivos para apagar em lote → CONDITION - Verificar sucesso antes de apagar