Bom dia,
como podemos extrair imagens de um destino FTP ?
Bom dia,
como podemos extrair imagens de um destino 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
Siga os passos abaixo no Formulário Dinâmico.
Crie as variáveis a seguir:
No procedimento onde você deseja que ocorra o download, adicione as instruções abaixo:
/www/meuarquivo.jpg
). Você pode buscar o caminho do arquivo do banco de dados usando uma “Record”.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;
{?VAR outputUrl}
:Boa noite @daniel.giacomelli estou tendo um problema técnico ao extrair as informações do FTP para o diretório no servidor.
O código roda como deveria ser, porém, os arquivos estão subindo zerados para o diretório dentro do servidor.
Você poderia me ajudar a localizar onde estou errando?
Segue meu codigo:
using System.IO;
using System.Net;
var vFTP = Convert.ToString(Variables["vEndereco"].Value); // --> Endereco FTP
var vPasta = Convert.ToString(Variables["vPasta"].Value); // --> Diretorio do FTP
var vUser = Convert.ToString(Variables["vUsuario"].Value); // --> Usuario do FTP
var vPass = Convert.ToString(Variables["vSenha"].Value); // --> Senha do FTP
var ftppath = Convert.ToString(Variables["vLinkVisualizacao"].Value);
var NomeArquivo = Convert.ToString(Variables["vNomeDoArquivo"].Value);
var PathServidor = Convert.ToString(Variables["vPastaDownload"].Value);
var PathFullServidor = PathServidor + "/" + NomeArquivo;
string ftpfullpath = ftppath + "/" + NomeArquivo;
string outputfilepath = Path.Combine(PathFullServidor); //"C:/inetpub/wwwroot/notas/29109001.pdf"
Directory.CreateDirectory(Path.GetDirectoryName(outputfilepath));
string outputUrl = ftpfullpath;
try
{
using (WebClient request = new WebClient())
{
// Passa usuário e senha do FTP.
request.Credentials = new NetworkCredential(vUser, vPass);
// 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;
Bom dia @Framos
Essa imagem que você mandou é do diretório para onde você está baixando os arquivos ou é do FTP?
@Framos estava dando uma pesquisada sobre o problema e encontrei este tópico:
Você pode tentar essa abordagem:
using (WebClient request = new WebClient())
{
// Passa usuário e senha do FTP.
request.Credentials = new NetworkCredential(vUser, vPass);
request.DownloadDataCompleted += (sender, eventArgs) =>
{
byte[] fileData = eventArgs.Result;
using (FileStream fileStream = new FileStream(outputfilepath, FileMode.Create))
fileStream.Write(fileData, 0, fileData.Length);
};
// Faz download do arquivo
request.DownloadData(ftpfullpath);
}
bom dia @daniel.giacomelli tudo bem?
Conseguir resolver o problema utilizando o código abaixo, agora esta tudo OK
Obrigado por me ajudar
using System.IO;
using System.Net;
var ftphost = Convert.ToString(Variables["vEndereco"].Value); // Endereço do FTP
var ftpfilepath = Convert.ToString(Variables["vPasta"].Value); // Diretório do arquivo dentro do FTP
var ftpfullpath = "ftp://" + ftphost + ftpfilepath; // FTP + Diretório
var ftpUser = Convert.ToString(Variables["vUsuario"].Value); // Usuário do FTP
var ftpPassword = Convert.ToString(Variables["vSenha"].Value); // Senha do FTP
var FileName = Convert.ToString(Variables["vNomeDoArquivo"].Value); // Nome do arquivo que quero baixar
var PathFullServidor = ftpfullpath + "/" + FileName; // FTP + Diretório + nome do arquivo
var PathDonwload = Convert.ToString(Variables["vPastaDownload"].Value); // Diretório no servidor onde será salvo o arquivo
var outputfilepath = PathDonwload + "/" + FileName; // Caminho onde o arquivo será baixado + nome do arquivo
var PathViwer = Convert.ToString(Variables["vLinkVisualizacao"].Value); // URL para baixar o arquivo pelo LATROMI
var LinkViwer = PathViwer + "/" + FileName; // Link utilizado para Visualizar o arquivo
Directory.CreateDirectory(Path.GetDirectoryName(outputfilepath)); // Cria a pasta "FTP_Downloads"
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(PathFullServidor));
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
request.UseBinary = true;
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
using (Stream rs = response.GetResponseStream())
{
using (FileStream ws = new FileStream(outputfilepath, FileMode.Create))
{
byte[] buffer = new byte[2048];
int bytesRead = rs.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
ws.Write(buffer, 0, bytesRead);
bytesRead = rs.Read(buffer, 0, buffer.Length);
}
}
}
}
}
catch
{
throw;
}
Variables["outputUrl"].Value = LinkViwer; // Linl completo para visualizar o arquivo