2013-10-30 30 views
13

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

+1

是;只是使用流。 – SLaks

+0

好的,我可以将文件从ftp网址链接直接加载到流实例中?或者我需要先将文件下载到用户的机器上?如果可能的话,我更喜欢前者。 – daved

回答

24

是的,你可以从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); 
} 
+0

我们确定'WebResponse.GetResponseStream'不会将数据推入临时文件并返回'FileStream'或类似的东西吗? –

+0

它甚至没有开始下载任何东西,直到你开始阅读流。我确信这一点,因为如果你不继续阅读一段时间的服务器超时。请参阅:http://msdn.microsoft.com/en-us/library/system.net.webresponse.getresponsestream(v=vs.110).aspx –

+0

这两个回复工作非常漂亮!谢谢! – daved

15

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

这是未经测试,但这样的:

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

我不熟悉的公司Farpoint虽然说是否不流可以直接与OpenExcel方法一起使用。 Online examples显示方法与FileStream一起使用,但我认为任何种类的Stream将被接受。

+1

找到这个对我有用。我试图从一个网站下载一个.zip文件,但使用新的WebClient()。OpenRead(文件)来获取流,但得到“流不支持查找操作”错误。不知道为什么这一个工作,但我很感激它:) – tehAon