直接下载文件到内存

问题描述 投票:0回答:4

我想将 excel 文件直接从 ftp 站点加载到内存流中。然后我想使用 OpenExcel(Stream) 方法在 FarPoint Spread 控件中打开文件。我的问题是我不确定是否可以将文件直接下载到内存中。有人知道这是否可能吗?

c# winforms visual-studio-2012 farpoint-spread
4个回答
43
投票

是的,您可以从 FTP 下载文件到内存。

我认为您甚至可以将来自 FTP 服务器的 Stream 传递给 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);
}

25
投票

看看WebClient.DownloadData。您应该能够将文件目录下载到内存中,而不是先将其写入文件。

这未经测试,但类似于:

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

我对FarPoint不太熟悉,不知道流是否可以直接与

OpenExcel
方法一起使用。 在线示例显示了与
FileStream
一起使用的方法,但我假设任何类型的
Stream
都会被接受。


1
投票

从 URL 下载文件到内存。 我的答案并没有准确显示如何下载文件以在 Excel 中使用,而是显示如何创建通用的内存中字节数组。

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

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

        return result;
    }

0
投票

我也在尝试使用网络客户端下载文件的相同方法

https://archives.nseindia.com/archives/nsccl/var/C_VAR1_03052023_1.DAT”;

使用此网址。但我收到错误“操作超时”

我的实现是这样的

字符串文件_= “https://nsearchives.nseindia.com/archives/nsccl/var/C_VAR1_”+ pickerBODDate.Value.ToString("ddMMyyyy").Trim()+"_1.DAT";

字符串路径_ = txtFilePath.Text + "\NSEVAR.DAT";

WebClient wc_ = new WebClient();

         try {
             wc_.Headers.Add(HttpRequestHeader.UserAgent, "Other");    wc_.Headers.Add(HttpRequestHeader.Accept,

“申请/pdf”); wc_.DownloadFile(文件_,路径_);

}

© www.soinside.com 2019 - 2024. All rights reserved.