2017-04-02 30 views
1

我想从URL下载图片。从Url下载图片效果不佳C#

我的类:

public class MyWebClient : WebClient 
{ 
    public TimeSpan Timeout { get; set; } 

    protected override WebRequest GetWebRequest(Uri uri) 
    { 
     WebRequest request = base.GetWebRequest(uri); 
     request.Timeout = (int)Timeout.TotalMilliseconds; 

     ((HttpWebRequest)request).ReadWriteTimeout = (int)Timeout.TotalMilliseconds; 

     return request; 
    } 
} 

而且我的方法:

public void DownloadImage(string _url, string filename) 
{ 
    try 
    { 
     var timeout = TimeSpan.FromMinutes(5); 
     using (var webClient = new MyWebClient { Timeout = timeout }) 
     { 
      byte[] imageData = webClient.DownloadData(_url); 
      File.WriteAllBytes(filename, imageData); 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
} 

我的测试:

string url = "http://wallpaperswide.com/download/a_wooden_house_forest-wallpaper-1440x900.jpg"; 

DownloadImage(url, @"D:\test.jpg"); 

下载的文件的大小是错误的,我无法打开图片文件。我使用了一个PictureBox控件从URL加载图像,但它也不起作用。

当我使用网络浏览器控制它的作品。

我的问题是什么?

回答

1

它看起来像你试图下载这个特定的网站期望指定一个User-Agent头,否则它只是返回一些HTML而不是图像。所以你可以欺骗它以为它是一个浏览器提出请求,你会得到预期的图像:

webClient.Headers["User-Agent"] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"; 
var imageData = webClient.DownloadData(_url); 
+0

感谢它被唤醒! –