使用C#下载3000多张图像?

时间:2010-12-14 18:20:45

标签: c# asp.net image url download

我有一个大约3000个图片网址的列表,我需要将它们下载到我的桌​​面。

我是一个网络开发人员,所以自然会写一个小的asp.net c#下载方法来做到这一点,但是明显的问题发生了,页面超时之前我几乎没有任何一个。

想知道是否有其他人知道我循环浏览所有图片网址并将其下载到文件夹的良好,快速和强大的方式?打开任何建议,WinForms,批处理文件,虽然我是两个新手。

任何帮助非常感谢

6 个答案:

答案 0 :(得分:11)

编写C#命令行应用程序(或Winforms,如果这是您的倾向),并使用WebClient类来检索文件。

以下是一些教程:

C# WebClient Tutorial

Using WebClient to Download a File

或,just Google C# WebClient

您需要提供要下载的文件列表并循环遍历列表,发出每个文件的请求并保存结果,或者发出索引页面请求,使用类似{{3找到所有图像标记,然后为每个图像发出请求,将结果保存在本地驱动器的某个位置。

修改

如果您只是想这样做一次(例如,而不是作为应用程序的一部分),HTML Agility Pack最有意义。

答案 1 :(得分:11)

wget怎么样?它可以下载文件中指定的URL列表。

wget -i c:\list-of-urls.txt

答案 2 :(得分:8)

您可能希望使用像Orbit这样的现有下载管理器,而不是为此目的编写自己的程序。 (亵渎,我知道)

我对Orbit非常满意。它允许您从文本文件中导入下载列表。它将管理连接,与多个连接并行下载每个文件的部分,以提高每次下载的速度。如果连接超时等,它会负责重试。看起来你需要付出很多努力才能从头开始构建这些功能。

答案 3 :(得分:6)

如果这只是一次性工作,那么一个简单的解决方案是编写一个带有指向URL的img标签的HTML页面。

然后使用FireFox浏览并使用扩展程序将所有图像保存到文件夹中。

答案 4 :(得分:1)

假设这是一次性运行一次项目,并且你是其他技术的新手,我建议如下:

不是尝试在一个Web请求中下载所有3000个图像,而是每个请求执行一个图像。图像下载完成后,重定向到同一页面,传递下一个图像的URL作为查询字符串参数。下载那个,然后重复,直到下载所有图像。

不是我称之为“生产”的解决方案,但如果我的假设是正确的,那么它就是一个让您立即投入运行的解决方案。

另一个相当简单的解决方案是创建一个简单的C#控制台应用程序,该应用程序使用WebClient下载每个图像。以下psuedo代码应该足以让你开始:

List<string> imageUrls = new List<string>();
imageUrls.Add(..... your urls from wherever .....)

foreach(string imageUrl in imagesUrls)
{
    using (WebClient client = new WebClient())
    {
        byte[] raw = client.DownloadData(imageUrl);

        .. write raw .. to file
    }
}

答案 5 :(得分:0)

我在WinForms中编写了一个类似的应用程序,它在Excel电子表格中循环访问URL并下载图像文件。我认为他们在实现此问题时遇到的问题是,作为Web应用程序,服务器只允许进程在浏览器请求超时之前运行一小段时间。您可以在web.config文件中增加此时间(更改httpRuntime元素的executionTimeout属性),或者将此功能实现为WinForms应用程序,其中长执行时间不会成为问题。如果这不仅仅是一个扔掉的应用程序,并且您决定使用WinForms路由,则可能需要向ind添加进度条