web-dev-qa-db-fra.com

Télécharger le fichier directement en mémoire

Je voudrais charger un fichier Excel directement à partir d'un site FTP dans un flux de mémoire. Ensuite, je souhaite ouvrir le fichier dans le contrôle FarPoint Spread à l'aide de la méthode OpenExcel (Stream). Mon problème est que je ne suis pas sûr s'il est possible de télécharger un fichier directement dans la mémoire. Quelqu'un sait si cela est possible?

15
daved

Oui, vous pouvez télécharger un fichier FTP sur la mémoire.

Je pense que vous pouvez même transmettre le flux depuis le serveur FTP pour qu’il soit traité par FarPoint.

WebRequest request = FtpWebRequest.Create("ftp://asd.com/file");

using (WebResponse response = request.GetResponse())
{
    Stream responseStream = response.GetResponseStream();
    OpenExcel(responseStream);
}

En utilisant WebClient, vous pouvez faire presque la même chose. En règle générale, utiliser WebClient est plus facile, mais vous offre moins d’options de configuration et de contrôle (par exemple: aucun paramètre de délai d’expiration).

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

Jetez un coup d’œil à WebClient.DownloadData . Vous devriez pouvoir télécharger le répertoire de fichiers dans la mémoire et ne pas l'écrire d'abord dans un fichier.

Ceci n’a pas été testé, mais quelque chose comme:

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

Cependant, je ne connais pas bien FarPoint pour dire si le flux peut être utilisé directement avec la méthode OpenExcel. Des exemples en ligne montrent la méthode utilisée avec FileStream, mais je suppose que tout type de Stream serait accepté.

17
Grant

Télécharger le fichier de l’URL à la mémoire . Ma réponse n’indique pas exactement comment télécharger un fichier pour une utilisation dans Excel, mais indique comment créer un tableau d’octets en mémoire à usage générique.

    private static byte[] DownloadFile(string url)
    {
        byte[] result = null;

        using (WebClient webClient = new WebClient())
        {
            result = webClient.DownloadData(url);
        }

        return result;
    }
0