2

我想实现一种将图像从网站下载到笔记本电脑的方法。

public static void DownloadRemoteImageFile(string uri, string fileName)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if ((response.StatusCode == HttpStatusCode.OK ||
            response.StatusCode == HttpStatusCode.Moved ||
            response.StatusCode == HttpStatusCode.Redirect) &&
            response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase))
        {
             //if the remote file was found, download it
            using (Stream inputStream = response.GetResponseStream())
            using (Stream outputStream = File.OpenWrite(fileName))
            {
                byte[] buffer = new byte[4096];
                int bytesRead;
                do
                {
                    bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                    outputStream.Write(buffer, 0, bytesRead);
                } while (bytesRead != 0);
            }
        }
}

但orContentType不是“image/jpg”或“image/png”。它们总是“文本/html”。我认为这就是为什么我将它们保存到本地后,它们的内容不正确,我无法查看它们。requestresponse

任何人都可以在这里找到解决方案吗?谢谢

4

4 回答 4

0

您可以使用此代码 - 基于JpegBitmapDecoder class

JpegBitmapDecoder decoder = new JpegBitmapDecoder(YourImageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
//here you can adjust your YourImageStreamSource with outputStream value

BitmapSource bitmapSource = decoder.Frames[0];

Image myImage = new Image();
myImage.Source = bitmapSource;
myImage.Save("YourImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

链接:http: //msdn.microsoft.com/en-us/library/aa970689.aspx

于 2012-09-29T03:36:46.733 回答
0

您希望从中获取图像的站点可能需要cookie。有时当我们使用浏览器访问该站点时,我们可能没有注意到它,但浏览器实际上可能会访问该站点一毫秒,然后快速重新加载,同时获取 cookie。但是在再次加载站点之前,我们的浏览器会传递给它 cookie,站点会接受它并返回图像。

详细地说,这意味着您的方法将只执行浏览器实际执行的一半。2 个 GET 请求方法的一半。第一个是获取 cookie,第二个是实际获取图像本身。

来自(可能有点相关)的​​信息:C# 动态生成一个站点将接受的 cookie?

于 2014-07-08T14:35:00.507 回答
0

尝试将内容类型设置为特定的图像类型

Response.ContentType = "image/jpeg";
于 2012-09-29T03:38:52.323 回答
-1

您的代码没问题,但您尝试做的事情通常被网站所有者认为是不受欢迎的行为。大多数网站都希望您在网站上看到图像,但不要随意下载它们。您可以搜索与您的问题相反的内容,以了解您所反对的技术和保护措施。

我强烈建议您阅读使用协议或您尝试抓取的网站上的任何类似文档,然后再继续。

于 2012-09-29T05:41:43.413 回答