2017-04-02 4 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

ダウンロードしようとしているこの特定のWebサイトのように、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

ありがとう –

関連する問題