C# 从URL问题保存图像

C# 从URL问题保存图像,c#,image,url,C#,Image,Url,我正在尝试从URL下载图像: 我正在使用HttpWebRequestwebResposeStreamBinaryReader文件流

我正在尝试从URL下载图像:

我正在使用
HttpWebRequest
webRespose
Stream
BinaryReader
文件流

这适用于其他网站和图像,但我在上面给出的url为我提供了一个空的0字节文件

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


有人能帮我吗?

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

最有可能的是,他们正在检查发送的标题,不允许机器人获取他们的知识产权

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

  • 更改请求代码以传递可信的浏览器标题
  • 请致电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)";
    

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

    最有可能的是,他们正在检查发送的标题,不允许机器人获取他们的知识产权

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

  • 更改请求代码以传递可信的浏览器标题
  • 请致电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)";
    
    我使用的是HttpWebRequest webRespose Stream 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):

    我使用的是HttpWebRequest webRespose Stream 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):


    我刚刚测试了一下,然后下载并保存了图片。您可能需要在路上的某个地方检查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");
    }
    

    我刚刚测试了一下,然后下载并保存了图片。您可能需要在路上的某个地方检查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");
    }
    


    你只需右键点击图像并将其保存到硬盘:)不,我现在正在尝试,克里斯。问题是,当我试图在浏览器上打开此图像时,它告诉我需要安装quicktimes插件。我可以看到这些图像,但当我复制并粘贴直接链接时,它会告诉我安装该插件。您的代码显然有问题,但如果您不发布,很难说是什么错了…你是在移动设备上运行的吗?我的简单C#文件下载程序能够轻松获取该文件。最好是在调试器中单步执行此操作,以便查看问题所在。如果您需要更多帮助,您必须向我们展示一些代码。Jim我正在电脑上运行这些代码。Thomas提供的解决方案运行良好。它让我下载图像文件。但是,我需要将图像文件发送到图像对象。有什么方法可以做到这一点吗?你只需右键点击图像并将其保存到硬盘:)没有,我只是在尝试,克里斯。问题是,当我试图在浏览器上打开此图像时,它告诉我需要安装quicktimes插件。我可以看到这些图像,但当我复制并粘贴直接链接时,它会告诉我安装该插件。您的代码显然有问题,但如果您不发布,很难说是什么错了…你是在移动设备上运行的吗?我的简单C#文件下载程序能够轻松获取该文件。最好是在调试器中单步执行此操作,以便查看问题所在。如果您需要更多帮助,您必须向我们展示一些代码。Jim我正在电脑上运行这些代码。Thomas提供的解决方案运行良好。它让我下载图像文件。但是,我需要将图像文件发送到图像对象。有没有办法做到这一点?谢谢,但我如何才能将请求代码更改为可信的浏览器标题?HttpWebRequest webRequest=(HttpWebRequest)HttpWebRequest.Create(imageUrl);webRequest.UserAgent=“Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1);谢谢,但我如何才能将请求代码更改为可信的浏览器标题?HttpWebRequest webRequest=(HttpWebRequest)HttpWebRequest.Create(imageUrl);webRequest.UserAgent=“Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1);你是英雄托马斯!它就像一个符咒;)但是,我需要将其转换为图像img=wc.MethodName;我怎样才能获得图像对象的图像?你的答案很好,特别是托马斯的方法非常好,代码行太少。但是,我需要从url获取另一个图像对象的图像。有没有办法不用下载文件就可以做到这一点。我对我的第一个问题感到抱歉。我问错了,这是我的错。你的答案太完美了。你就是英雄托马斯!它就像一个符咒;)但是,我需要将其转换为图像img=wc.MethodName;我怎样才能获得图像对象的图像?你的答案很好,特别是托马斯的方法非常好,代码行太少。但是,我需要从url获取另一个图像对象的图像。有没有办法不用下载文件就可以做到这一点。我对我的第一个问题感到抱歉。我问错了,这是我的错。你的答案非常完美。Kluminotty,非常感谢你的回答解决了我的问题不是问题,我看到了这篇文章,意识到我几周前在我正在完成的一个web应用程序上刚刚经历了这个问题。知识不被分享就是知识的丢失。Kluminotty,非常感谢朋友你的回答解决了我的问题不是问题,我看了这篇文章并