【问题标题】:image saving from a URL problem从 URL 问题中保存图像
【发布时间】:2011-11-26 23:49:46
【问题描述】:

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

我正在使用HttpWebRequestwebResposeStreamBinaryReaderFileStreamBinaryWriter

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

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

有人可以帮我吗?

【问题讨论】:

  • 您只需右键单击图像并将其保存到您的硬盘:)
  • 不,我现在正在尝试,克里斯。问题是当我尝试在浏览器上打开此图像时,它告诉我需要安装 quicktimes 插件。我可以看到图像,但是当我复制并粘贴直接链接时,它告诉我安装该插件。跨度>
  • 你的代码明显有问题,但是不贴出来就很难说是哪里出了问题……
  • 您是在移动设备上运行它吗?我的简单 C# 文件下载器能够毫无问题地抓取该文件。最好的办法是在调试器中单步执行此操作,以便查看问题出在哪里。如果您需要更多帮助,您必须向我们展示一些代码。
  • Jim 我在 PC 上运行代码。 Thomas 提供的解决方案效果很好。它让我下载图像文件。但是,我需要将图像文件获取到图像对象。有没有办法做到这一点?

标签: c# image url


【解决方案1】:

我正在使用 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):

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

【讨论】:

  • 你是英雄托马斯!它就像一个魅力;)但是我需要把它变成一个 Image img = wc.MethodName;如何将图像获取到 Image 对象?
  • 您的答案很棒,尤其是 Thomas 的方法在代码行太少的情况下效果很好。但是我需要将图像从 url 获取到另一个图像对象。有没有办法在不下载文件的情况下做到这一点。我很抱歉我的第一个问题。我问错了,这是我的错。你的答案很完美。
【解决方案2】:

我刚刚对此进行了测试,并为我下载并保存了图像。您可能需要检查 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");
}

【讨论】:

  • Kluminotty,非常感谢朋友您的回答解决了我的问题
  • 没问题,我看到这篇文章并意识到我几周前刚刚在我正在完成的一个网络应用程序上经历了这个。不共享的知识就是丢失的知识。
【解决方案3】:

我想知道你是否已经访问了他们的网站太多次,而他们现在正在阻止你滥用...

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

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

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

【讨论】:

  • 谢谢,但是如何将我的请求代码更改为可信的浏览器标头?
  • HttpWebRequest webRequest = (HttpWebRequest) HTtpWebRequest.Create(imageUrl); webRequest.UserAgent = "Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1);
猜你喜欢
  • 2012-03-30
  • 1970-01-01
  • 2010-10-17
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多