Baixar arquivo diretamente para a memory

Eu gostaria de carregar um arquivo excel diretamente de um site ftp em um stream de memory. Então eu quero abrir o arquivo no controle FarPoint Spread usando o método OpenExcel (Stream). Meu problema é que não tenho certeza se é possível baixar um arquivo diretamente na memory. Alguém sabe se isto é possível?

Sim, você pode baixar um arquivo do FTP para a memory.

Eu acho que você pode até passar o stream do servidor FTP para ser processado pelo FarPoint.

WebRequest request = FtpWebRequest.Create("ftp://asd.com/file"); using (WebResponse response = request.GetResponse()) { Stream responseStream = response.GetResponseStream(); OpenExcel(responseStream); } 

Usando o WebClient você pode fazer quase o mesmo. Geralmente, usar o WebClient é mais fácil, mas oferece menos opções de configuração e controle (por exemplo: sem configuração de tempo limite).

 WebClient wc = new WebClient(); using (MemoryStream stream = new MemoryStream(wc.DownloadData("ftp://asd.com/file"))) { OpenExcel(stream); } 

Dê uma olhada no WebClient.DownloadData . Você deve poder baixar o diretório de arquivos na memory e não gravá-lo primeiro em um arquivo.

Isso não foi testado, mas algo como:

 var spreadSheetStream = new MemoryStream(new WebClient().DownloadData(yourFilePath)); 

Eu não estou familiarizado com o FarPoint para dizer se o stream pode ou não ser usado diretamente com o método OpenExcel . Exemplos online mostram o método sendo usado com um FileStream , mas eu suponho que qualquer tipo de Stream seria aceito.

Faça o download do arquivo da URL para a memory. Minha resposta não mostra exatamente, como baixar um arquivo para uso no Excel, mas mostra como criar uma matriz de bytes na memory de finalidade genérica.

  private static byte[] DownloadFile(string url) { byte[] result = null; using (WebClient webClient = new WebClient()) { result = webClient.DownloadData(url); } return result; }