2015-07-13 148 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,但它是相同的结果。 –