2015-07-13 151 views
0

我使用網站獲取有關wifi使用情況的統計信息。該網站創建數據的圖形表示圖像。它這樣做的方式是由用戶設置日期。例如,讓我們說這是上個月的統計數據。該網站生成一個URL,然後發送到服務器和服務器返回一個圖像。鏈接的例子是這樣的:C#從URL下載圖片

https://www.example.com/graph/daily_usage?time_from=2015-06-01+00%3A00%3A00+%2B0100&time_to=2015-06-30+23%3A59%3A59+%2B0100&tsp=1436519988

的問題是,我想提出一個第三方程序,將下載該圖片在我的程序中使用。但是,我無法使用該文件。這就好像該文件是損壞的或某事。我嘗試了一些方法,但也許有人可以提出一種不同的方法。 基本上,我如何從URL鏈接下載服務器生成的圖像?

P.S.

只是注意到,如果我通過右鍵單擊瀏覽器並保存下載該文件,圖像下載大小爲17.something千字節。但如果我使用WebClient方法下載圖像,它只下載1.5kb。爲什麼會這樣?看起來像WebClient方法沒有完全下載。

目前我的代碼

if (hrefAtt == "Usage Graph") 
{ 
    string url = element.getAttribute("src"); 
    WebClient client = new WebClient(); 
    client.DownloadFile(url, tempFolderPath + "\\" + currentAcc + "_UsageSummary.png"); 
    wd.AddImagesToDoc(tempFolderPath + "\\" + currentAcc + "_UsageSummary.png"); 
    wd.SaveDocument(); 
} 

TempFolderPath是我的桌面\ TempFolder \

UPDATE 出於隨機的,我決定去看看文件的原始數據,用記事本和有趣的是,圖像數據實際上是網站首頁html代碼的副本,而不是圖像的原始數據:S這有什麼意義?

+0

您使用了哪些方法? –

+0

到目前爲止,我已經嘗試使用DID下載文件的WebClient方法,但是當我嘗試打開它時,圖像已損壞?即使我將它設置爲.jpg。我試過的另一種方法是在wpf窗口中設置一個Image_Box控件,並將該圖像的源設置爲URL,但這也不起作用(這是爲了測試目的而做的,我的意圖是讓它下載文件) –

+0

Show我們使用webclient並下載損壞文件的代碼 –

回答

2

這將下載谷歌標誌:

所有的
var img = Bitmap.FromStream(new MemoryStream(new WebClient().DownloadData("https://www.google.co.uk/images/srpr/logo11w.png"))); 
+0

感謝您的建議Dave,但我不能在WPF中設置Image_Box控件源,因爲它們是不兼容的類型。我嘗試鑄造,但它沒有奏效。 –

0

首先,你必須瞭解鏈接質感。如果所有鏈接相同或彼此接近,則必須使用substring/remove/datetime等方法來創建新的請求鏈接。例如;

string today = DateTime.Now.ToShortDateString(); 
string generatedLink = @"http://www.yoururl.com/image + " + today + ".jpg"; 
string generatedFileName = @"C:\Usage\usage + " + today + ".jpg"; 

WebClient wClient = new WebClient(); 
wClient.DownloadFile(generatedLink, generatedFileName); 
+0

我試過使用WebClient方法,它確實下載了一個文件,但它好像已損壞 –

+0

您是否嘗試更改圖片擴展名? jpt到bmp,gif,png等? –

+0

是的,我試過png,但它是相同的結果。 –