如何从http映像创建System.Drawing.Image

时间:2011-05-04 09:34:46

标签: c# .net http httprequest

我不习惯使用远程资源,所以也许这个问题很简单,但我不确定如何实现它。

我需要加载放在http文件夹中的图像集合,例如http://www.myexsamplesite.com/images

在这个目录中我可以有N个不同名字的图像。

我需要在WinForms应用程序中(在ListView中)显示这些图像。

我正在研究的替代方法是将图像下载到tmp目录,然后从我的WinForms应用程序从磁盘加载它们。我正在使用以下内容:

WebClient fileReader = new WebClient();
 fileReader.DownloadFile(imageAddress, filePath);

将文件下载到磁盘。我的问题是:

如何在http文件夹中下载所有文件?我想我需要枚举文件夹中的文件,然后一对一下载。

第二个问题也是最重要的。我确信有一个更好的机制来执行这项任务。所以:

还有其他方法可以将http图片内容转换为System.Drawing.Image吗?

请记住,我需要获取http文件夹中的所有文件。

提前致谢

1 个答案:

答案 0 :(得分:3)

首先,要获取所有文件,您需要一种枚举它们的方法。 HTTP没有任何方法可以让你下载整个目录,或者技术上甚至可以列出目录中的内容。某些Web服务器设置为向您发送预定义的Web页面,该页面在缺少默认页面时显示目录中的文件列表,但不是全部。您可以解析该内容以获取需要下载的文件列表。否则,您需要找到一种基于Web应用程序本身以编程方式获取该信息的方法。

其次,我记得你可以从image加载stream。您可以使用WebClient代替HttpWebRequest,以便访问内容流,并将其提供给构造函数。但是,我认为使用临时目录并从那里加载文件可能更好/更容易。有时在从这样的网络流中加载东西时会发生意想不到的事情(例如,试图保持打开带有动画的GIF图像流以持续读取动画的帧),这可能会导致奇怪的异常。不准备调试和了解蝙蝠。

最后,请注意,您只能在此处使用mime type来验证您的内容是否为图片 - 因此您明确地加载mime类型为application/octet-stream的内容进入image对象 - 但只包含image/jpegimage/gifimage/png等内容。