2011-09-28 66 views
1

我试图从URL下载的图像保存: http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2图像从URL问题

我使用HttpWebRequestwebResposeStreamBinaryReaderFileStreamBinaryWriter

这适用于其他网站和图片,但我给的网址以上给了我一个空的0字节的文件..

这意味着我无法将图像从该URL保存。

有没有人谁可以帮我?

+0

您可以右键单击图像并将其保存到您的硬盘:) –

+0

不,我现在只是尝试它,克里斯。问题是,当我试图在浏览器上打开这个图像时,它告诉我需要安装quicktimes插件。我可以看到图像,但是当我复制并粘贴直接链接时,它会告诉我安装该插件。 –

+1

东西显然是你的代码错误,但如果你不张贴,这是很难说什么是错的... –

回答

6

我使用HttpWebRequest的webRespose流BinaryReader在的FileStream的BinaryWriter

为什么使用6个不同的类时,你可以做同样的只有一个?

string sourceUrl = "http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2"; 
string localPath = @"C:\foo\bar\340582.png"; 
using (WebClient wc = new WebClient()) 
{ 
    wc.DownloadFile(sourceUrl, localPath); 
} 

如果您需要从该网址加载图像,你可以做到这一点(我假设你正在使用的WinForms/GDI):

string sourceUrl = "http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2"; 
string localPath = @"C:\foo\bar\340582.png"; 
Image image; 
using (WebClient wc = new WebClient()) 
using (Stream stream = wc.OpenRead(sourceUrl)) 
{ 
    image = Image.FromStream(stream); 
} 
+1

+1。WebClient就是要走的路 –

+0

你是英雄托马斯!魅力;)但是我需要得到它的图像img = wc.MethodName;我怎样才能获得图像的图像对象? –

+0

你的答案是伟大的,尤其是托马斯的方法工作得很好,代码行太少 然而,我需要从url到另一个图像对象获得图像。有没有办法做到这一点,而不需要下载文件。我对我的第一个问题感到抱歉,我以错误的方式问,这是我的错误。完美 –

1

我不知道您是否击中了他们的网站太多次,他们现在阻止你滥用...

最有可能的,他们正在检查发送的头,而不是让机器人抓住自己的知识产权。

两个可能的解决方案浮现在脑海中:

  1. 更改请求代码传递可信浏览器的标题。
  2. 呼叫blackberry.com并获得许可,再利用他们的文件。

你或许应该一举两得。

的一点是,我怀疑这是一个代码问题,更可能侵犯他们的服务条款。


和乐趣:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); 
// Setting the useragent seems to resolve certain issues that *may* crop up. 
httpRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
+0

谢谢,但我该如何将我的请求代码更改为可信的浏览器标题? –

+0

HttpWebRequest webRequest =(HttpWebRequest)HTtpWebRequest.Create(imageUrl); webRequest.UserAgent =“Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1); –

+0

@Val Nolav:查看更新 – NotMe

1

我只是测试了这一点,这和下载为我保存了图像。您可能需要检查MIME类型以及沿途的所有地方。

string url = "http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2"; 

using (System.Drawing.Image img = System.Drawing.Image.FromStream(WebRequest.Create(url).GetResponse().GetResponseStream())) { 
    img.Save("new.jpg"); 
} 
+0

Kluminotty,非常感谢朋友您的回答解决了我的问题 –

+0

不是问题,我看到这篇文章,并意识到我刚刚在几个星期前通过我正在完成的一个Web应用程序经历了这个。不共享知识就是知识丢失。 –