从 Url 下载图片效果不佳 C#
Download Image From Url not Working Well C#
我想从 URL 下载图像。
我的class:
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 加载图像,但它也不起作用。
当我使用网络浏览器控件时,它可以正常工作。
我的问题是什么?
看起来您尝试下载的这个特定网站需要指定 User-Agent
header,否则它只是 returns 一些 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);
我想从 URL 下载图像。
我的class:
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 加载图像,但它也不起作用。
当我使用网络浏览器控件时,它可以正常工作。
我的问题是什么?
看起来您尝试下载的这个特定网站需要指定 User-Agent
header,否则它只是 returns 一些 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);