Como extrair um arquivo de um diretório FTP?

Olá @anael_ribeiro!

A técnica que vou mostrar arqui consiste em usar um código C# para baixar o arquivo do FTP para o servidor, e em seguida, montar uma URL para download pelo Latromi e devolve-la para o usuário.

O fluxo do arquivo será este:

FTP → Servidor do Latromi → Navegador do Usuário

Formulário

Siga os passos abaixo no Formulário Dinâmico.

Variáveis

Crie as variáveis a seguir:

  • Adicione uma variável para receber o caminho remoto do arquivo. Neste exemplo, a variável se chama ftpFilePath.
  • Adicione uma variável para receber a URL para download pelo Latromi. Neste exemplo, a variável se chama outputUrl.

Procedimentos

No procedimento onde você deseja que ocorra o download, adicione as instruções abaixo:

  1. Adicione uma instrução “Preencher Campos e Variáveis” para preencher a variável “ftpFilePath” com o caminho do arquivo no FTP (algo como /www/meuarquivo.jpg). Você pode buscar o caminho do arquivo do banco de dados usando uma “Record”.
  2. Adicione uma instrução “Executar Código C#”. Aqui você adicionar o código a seguir para baixar o arquivo do FTP, substituindo os valores referentes ao endereço, usuário e senha do FTP:
    using System.IO;
    using System.Net;
    
    // Dados do FTP
    string ftphost = "ftp.meudominio.com.br";
    // Caminho remoto do arquivo. Algo como "/www/file.jpg"
    string ftpfilepath = Variables["ftpFilePath"].Value?.ToString();
    
    string ftpfullpath = "ftp://" + ftphost + ftpfilepath;
    string ftpUser = "usuario";
    string ftpPassword = "senha";
    
    // Caminho fisico onde o arquivo será criado
    // Algo como: c:\inetpub\wwwlatromi\Web\Temp\Users\usuario\FTP_Downloads\arquivo.jpg
    string outputfilepath = Path.Combine(Environment.TempFolder, "FTP_Downloads", ftpfilepath.Split('/').LastOrDefault());
    
    // Cria a pasta "FTP_Downloads"
    Directory.CreateDirectory(Path.GetDirectoryName(outputfilepath));
    
    // URL para baixar o arquivo pelo LATROMI
    // Algo como: https://latromi.meudominio.com.br/web/Temp/Users/usuario/FTP_Downloads/arquivo.jpg
    string outputUrl = Environment.TempFolderUrl + @"\FTP_Downloads\" + ftpfilepath.Split('/').LastOrDefault();
    
    try
    {
       using (WebClient request = new WebClient())
       {
           // Passa usuário e senha do FTP.
           request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
           
           // Faz download do arquivo
           request.DownloadFile(ftpfullpath, outputfilepath);
       }
    }
    catch (Exception ex)
    {
       throw new InvalidOperationException(ex.Message + "\t" + ex.InnerException?.Message);
    }
    
    // Preenche a variável do Formulário com a URL do arquivo para download
    Variables["outputUrl"].Value = outputUrl;
    
  3. Por último, adicione uma instrução “Abrir URL”, selecione o alvo “Download” e no URL, use apenas a marcação da variável {?VAR outputUrl}: