FTP_RENAME - Renomear/Mover Arquivo no Servidor FTP
O que é este Node?
O FTP_RENAME é o node responsável por renomear ou mover arquivos em um servidor FTP remoto. Permite reorganizar arquivos e implementar workflows de processamento.
Por que este Node existe?
Organizar e marcar arquivos como processados é essencial em integrações. O FTP_RENAME existe para:
- Marcar como Processado: Renomear arquivo após importação (ex: pedidos.csv → pedidos_processado.csv)
- Arquivar: Mover arquivos de /incoming/ para /processed/ ou /archive/
- Reorganizar: Mover arquivos para pastas organizadas por data
- Workflow: Implementar ciclo de vida de arquivos (novo → processando → concluído)
Como funciona internamente?
Quando o FTP_RENAME é executado, o sistema:
- Conecta ao FTP: Estabelece conexão com servidor usando credenciais
- Valida Caminhos: Confirma que caminho antigo e novo foram fornecidos
- Executa Rename: Envia comando RNFR (rename from) e RNTO (rename to) ao servidor
- Move/Renomeia: Servidor move arquivo do caminho antigo para novo
- Registra Timestamp: Captura momento da operação
- Se falhar: Retorna erro (arquivo não existe, destino já existe, etc)
- Se sucesso: Confirma operação com ambos caminhos e timestamp
Código interno (ftp-executor.service.ts:371-385):
private async renameFile(client: FTP.Client, data: FTPNodeData): Promise<any> {
const oldPath = data.oldPath!;
const newPath = data.newPath!;
this.logger.debug(`Renaming file: ${oldPath} → ${newPath}`);
await client.rename(oldPath, newPath);
return {
success: true,
oldPath,
newPath,
renamedAt: new Date().toISOString()
};
}
Quando você DEVE usar este Node?
Use FTP_RENAME sempre que precisar de renomear ou mover arquivos no FTP:
Casos de uso
- Arquivamento: "Mover CSV de /incoming/ para /processed/ após importar"
- Versionamento: "Renomear backup.sql para backup_2025-01-15.sql"
- Workflow: "Mover pedido de /pending/ para /processing/ e depois /done/"
Quando NÃO usar FTP_RENAME
- Copiar Arquivo: FTP_RENAME move (não copia). Para copiar, baixe e faça upload
- Trocar Extensão: Se precisa converter formato, baixe, processe e faça upload do novo
- Entre Servidores: FTP_RENAME só funciona no mesmo servidor FTP
Parâmetros Detalhados
oldPath (string, obrigatório)
O que é: Caminho atual do arquivo no servidor FTP.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste FTP Rename - OldPath",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Arquivo Atual",
"parameters": {
"variableName": "arquivo_origem",
"value": "/temp/documento.pdf"
}
}
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Renomear Arquivo",
"parameters": {
"host": "ftp.example.com",
"username": "user",
"password": "pass",
"operation": "rename",
"oldPath": "{{arquivo_origem}}",
"newPath": "/archive/documento.pdf",
"outputVariable": "rename_result"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Movido:\nDe: {{rename_result.oldPath}}\nPara: {{rename_result.newPath}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Arquivo será movido de /temp/ para /archive/.
newPath (string, obrigatório)
O que é: Novo caminho/nome do arquivo no servidor FTP.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste FTP Rename - NewPath",
"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": "Novo Nome",
"parameters": {
"message": "Novo nome do arquivo:",
"variableName": "novo_nome"
}
}
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Renomear",
"parameters": {
"host": "ftp.server.com",
"username": "user",
"password": "pass",
"operation": "rename",
"oldPath": "/uploads/temp.csv",
"newPath": "/uploads/{{novo_nome}}",
"outputVariable": "resultado"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Arquivo renomeado para: {{novo_nome}}"
}
}
},
{
"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 "pedidos_2025-01-15.csv". Arquivo será renomeado.
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 "rename" |
| oldPath | string | Sim | Caminho atual do arquivo |
| newPath | string | Sim | Novo caminho/nome do arquivo |
| outputVariable | string | Não | Variável de resultado (padrão: ftp_result) |
Exemplo 1: Arquivar Arquivo Após Processamento
Objetivo: Mover CSV de /incoming/ para /processed/ após importar dados
JSON para Importar
{
"name": "Processar e Arquivar",
"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.parceiro.com",
"username": "empresa",
"password": "pass123",
"operation": "download",
"remoteFilePathDownload": "/incoming/pedidos.csv",
"localFilePathDownload": "/tmp/pedidos.csv"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Processar",
"parameters": {
"message": "⚙️ Processando pedidos..."
}
}
},
{
"id": "ftp_rename",
"type": "ftp",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Arquivar no Servidor",
"parameters": {
"host": "ftp.parceiro.com",
"username": "empresa",
"password": "pass123",
"operation": "rename",
"oldPath": "/incoming/pedidos.csv",
"newPath": "/processed/pedidos_2025-01-15.csv",
"outputVariable": "arquivo_info"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Finalizar",
"parameters": {
"message": "✅ Pedidos importados e arquivados!\nArquivo: {{arquivo_info.newPath}}"
}
}
},
{
"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_rename" },
{ "source": "ftp_rename", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: ⚙️ Processando pedidos...
Sistema: ✅ Pedidos importados e arquivados!
Arquivo: /processed/pedidos_2025-01-15.csv
Exemplo 2: Adicionar Timestamp ao Nome do Arquivo
Objetivo: Renomear arquivo adicionando data/hora para versionamento
JSON para Importar
{
"name": "Versionamento com Timestamp",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Data Atual",
"parameters": {
"variableName": "timestamp",
"value": "2025-01-15_10-30"
}
}
},
{
"id": "ftp_rename",
"type": "ftp",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Renomear com Timestamp",
"parameters": {
"host": "ftp.backup.com",
"username": "backup",
"password": "pass",
"operation": "rename",
"oldPath": "/backups/database.sql",
"newPath": "/backups/database_{{timestamp}}.sql",
"outputVariable": "backup_versao"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar Versão",
"parameters": {
"message": "💾 Backup versionado!\n{{backup_versao.newPath}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "ftp_rename" },
{ "source": "ftp_rename", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 💾 Backup versionado!
/backups/database_2025-01-15_10-30.sql
Resposta do Node
{
"success": true,
"data": {
"ftp_result": {
"success": true,
"oldPath": "/incoming/pedidos.csv",
"newPath": "/processed/pedidos_2025-01-15.csv",
"renamedAt": "2025-01-15T10:30:00.000Z"
},
"operation": "rename",
"host": "ftp.parceiro.com",
"timestamp": "2025-01-15T10:30:00.000Z"
},
"executionTime": 456,
"logs": [
"Renamed: /incoming/pedidos.csv → /processed/pedidos_2025-01-15.csv"
]
}
Boas Práticas
✅ SIM:
- Use rename para arquivar ao invés de apagar (mantém histórico)
- Adicione timestamp nos nomes para versionamento
- Organize arquivos em pastas por status (/incoming/, /processing/, /done/)
- Verifique se arquivo origem existe antes de renomear
- Use pasta /archive/ para manter backups organizados
❌ NÃO:
- Não renomeie se arquivo destino já existir (será sobrescrito)
- Não use rename para copiar (é uma operação de mover, não copiar)
- Não renomeie entre diferentes servidores (só funciona no mesmo)
- Não renomeie diretórios com este node (use comandos específicos)
Dicas
💡 Dica 1: FTP_RENAME é operação ATÔMICA. Não há arquivo duplicado durante rename.
💡 Dica 2: Para criar estrutura de pastas por data: /archive/2025/01/15/arquivo.csv
💡 Dica 3: Adicione sufixos: _processado, _backup, _old para identificar status.
💡 Dica 4: Se newPath já existe, maioria dos servidores FTP sobrescreve sem aviso!
Próximos Nodes
→ FTP_DELETE - Apagar após arquivar → FTP_DOWNLOAD - Baixar antes de renomear → FTP_LIST - Listar arquivos para renomear em lote → FTP_MKDIR - Criar pasta de destino antes de mover