从URL问题中保存图像

时间:2011-09-28 15:33:09

标签: c# image url

我正在尝试从网址下载图片: http://appworld.blackberry.com/webstore/servedimages/340582.png?t=2

我正在使用HttpWebRequest webRespose Stream BinaryReader FileStream BinaryWriter

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

表示我无法保存该网址中的图片。

有没有人可以帮助我?

3 个答案:

答案 0 :(得分: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);
}

如果您需要从此URL加载图像,您可以这样做(我假设您正在使用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)

我想知道你是否曾多次访问他们的网站,他们现在阻止你滥用......

他们很可能正在检查已发送的标头,并且不允许机器人获取其知识产权。

我想到了两种可能的解决方案:

  1. 更改您的请求代码以传递可信的浏览器标题。
  2. 致电blackberry.com并获得重新使用其文件的权限。
  3. 你应该两个都做。

    重点是,我怀疑这是代码问题,更可能违反了他们的服务条款。


    和乐趣:

    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)";
    

答案 2 :(得分: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");
}