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:
- Limpar Arquivos Processados: Remover arquivos já importados para evitar reprocessamento
- Gerenciar Espaço: Apagar arquivos antigos para liberar espaço em disco
- Manutenção Automatizada: Remover temporários e logs obsoletos automaticamente
- Ciclo de Vida: Implementar políticas de retenção de dados
Como funciona internamente?
Quando o FTP_DELETE é executado, o sistema:
- Conecta ao FTP: Estabelece conexão com servidor usando credenciais
- Valida Caminho: Confirma que caminho do arquivo foi fornecido
- Executa Remoção: Envia comando DELE (delete) ao servidor FTP
- Aguarda Confirmação: Espera servidor confirmar remoção
- Registra Timestamp: Captura momento da remoção
- Se falhar: Retorna erro (arquivo não existe, sem permissão, etc)
- 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
- Pós-Processamento: "Apagar CSV após importar pedidos com sucesso"
- Limpeza Periódica: "Remover backups com mais de 30 dias todas as semanas"
- 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