Скачать файл прямо в память

Я хотел бы загрузить файл Excel непосредственно с FTP-сайта в поток памяти. Затем я хочу открыть файл в элементе управления FarPoint Spread, используя метод OpenExcel (Stream). Моя проблема в том, что я не уверен, возможно ли загрузить файл непосредственно в память. Кто-нибудь знает, возможно ли это?

3 ответа

Решение

Да, вы можете загрузить файл с FTP в память.

Я думаю, что вы даже можете передать поток с FTP-сервера для обработки FarPoint.

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

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

Используя WebClient, вы можете сделать почти то же самое. Как правило, использование WebClient проще, но дает меньше возможностей для настройки и управления (например, нет времени ожидания).

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

Посмотрите на WebClient.DownloadData. Вы должны иметь возможность загружать каталог файлов в память и не записывать его в файл первым.

Это не проверено, но что-то вроде:

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

Я не знаком с FarPoint, хотя, чтобы сказать, может ли поток использоваться непосредственно с OpenExcel метод. Онлайн примеры показывают метод, используемый с FileStream, но я бы предположил, что любой Stream будет принято.

Скачать файл с URL в память.Мой ответ не совсем показывает, как загрузить файл для использования в Excel, но показывает, как создать байтовый массив общего назначения в памяти.

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

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

        return result;
    }
Другие вопросы по тегам