获取.txt文件而不是.jpg - 使用Webclient和DownloadFile();

时间:2012-07-03 00:46:30

标签: c# webclient jpeg downloadfile

使用WebclientDownloadFile();

获取.txt文件而不是.jpg

我正在尝试从此网址下载.jpg:

http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg

使用此代码:

private void TEST_button1_Click(object sender, EventArgs e)
{
    WebClient MyDownloader = new WebClient();
    MyDownloader.DownloadFile(@"http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg", @"c:\test.jpg");
}

然而,当我运行这个时,我最终得到一个名为 test.jpg 的文件,其中包含html标记......:

<html>
<head>
<title>avengers02_B&amp;W_UL.jpg (image)</title>
<script type="text/javascript">
<!--
if (top.location != self.location) top.location = self.location;
// -->
</script>
</head>
<body bgcolor="#ffffff" text="#000000">
<img src="http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600/avengers02_B%26W_UL.jpg" alt="[avengers02_B&amp;W_UL.jpg]" border=0>
</body>
</html>

如何下​​载实际的.jpg?

非常感谢任何帮助 - 谢谢!

3 个答案:

答案 0 :(得分:2)

如果服务器在特定的Url上将HTML返回给您的请求,则无法强制它在该Url上返回其他内容。

你可以做的是用HtmlAgilityPack解析响应并找到实际图像的url并在另一个请求中获取它。

答案 1 :(得分:1)

有办法做到这一点。首先,将HTML内容下载到字符串并提取正确的图像URL。然后使用正确的URL下载文件。

 WebClient client = new WebClient();
 var path = @"http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg";

 var content = client.DownloadString(path);
 System.Text.RegularExpressions.Regex regex = new Regex(@"(?<=<img\s+[^>]*?src=(?<q>['""]))(?<url>.+?)(?=\k<q>)");
 var match = regex.Match(content);
 if (match.Success)
 {
     client.DownloadFile(match.Value, @"e:\test1.jpg");
 } 

答案 2 :(得分:0)

点击该链接会导致2次下载,首先是一页HTML(标注后缀为.jpg),然后是HTML中的图片。

那么您是否需要获取上一个请求提取的HTML中img标记的网址?

http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600/avengers02_B%26W_UL.jpg

我猜测从原始网址中删除-h可能会指向您所追求的实际文件。

希望您有权抓取这些文件......