我想实现一种将图像从网站下载到笔记本电脑的方法。
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);
}
}
}
但ContentType
或request
的{{1}}不是“image / jpg”或“image / png”。他们总是“text / html”。我认为这就是为什么在我将它们保存到本地后,它们的内容不正确,我无法查看它们。
有人可以在这里找到解决方案吗? 感谢
答案 0 :(得分: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);
答案 1 :(得分:0)
尝试将内容类型设置为特定图像类型
Response.ContentType = "image/jpeg";
答案 2 :(得分:0)
您希望从中获取图片的网站可能需要 cookie 。有时当我们使用我们的浏览器访问网站时,我们可能不会注意到它,但浏览器实际上会在快速重新加载之前进入网站大约一毫秒,同时获取cookie。但是在再次加载网站之前,我们的浏览器会在这次传递cookie,然后网站接受它并返回图像。
详细说明,这意味着您的方法只能执行浏览器实际执行的操作的一半。 2个GET请求方法中的一半。第一个是获取cookie,第二个是实际获取图像。
来自(可能有点相关)的信息:C# generate a cookie dynamically that site will accept?
答案 3 :(得分:-1)
您的代码没问题,但您尝试做的事情通常被网站所有者视为不受欢迎的行为。大多数网站都希望您在网站上看到图片,但不要随意下载。您可以搜索问题的对话,以了解您所反对的技术和保护措施。
我强烈建议您阅读您试图继续使用的网站上的使用协议或任何类似文件。