【问题标题】:Get .txt file instead of .jpg - using Webclient and DownloadFile();获取 .txt 文件而不是 .jpg - 使用 Webclient 和 DownloadFile();
【发布时间】:2012-07-03 10:10:23
【问题描述】:

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

我正在尝试从此 URL 下载 .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?

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

【问题讨论】:

    标签: c# webclient jpeg downloadfile


    【解决方案1】:

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

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

    【讨论】:

    • 我可能遗漏了一些东西,但如果您粘贴或单击该 URL,它会显示正确的图像...我不明白什么?
    • @ChrisL - 在浏览器中查看源代码或使用 Fiddler 查看服务器实际返回的内容。您将看到内部带有 IMG 的 HTML - 您对服务器的行为无能为力(除非您确定有一种方法可以在此特定服务器上为这种特定类型的请求设置标头/查询参数以直接返回图像)。
    【解决方案2】:

    有办法做到这一点。首先,您将 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");
     } 
    

    【讨论】:

    • 我更喜欢使用 HtmlAgilityPack 而不是正则表达式来解析 html,尽管这种 特定 的情况很琐碎,没关系。
    • 感谢出色的代码——这绝对是我可以使用的,我明白了。抱歉,我很抱歉,但非常感谢您的耐心和帮助!
    【解决方案3】:

    单击该链接会导致 2 次下载,首先是 HTML 页面(后缀为 .jpg 的标签错误),然后是 HTML 中的图像。

    那么也许你需要在上一个请求获取的 HTML 中获取 img 标签的 url?

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

    我猜想从原始 URL 中删除 -h 可能会指向您要查找的实际文件。

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

    【讨论】:

    • 这完全可以,感谢您让我了解如何完成此操作!
    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多