C#编程:从网络下载并保存图片的实现方法

3星 · 超过75%的资源 需积分: 9 44 下载量 155 浏览量 更新于2024-09-19 收藏 2KB TXT 举报
"C#获取图片并保存到本地的代码示例" 在C#编程语言中,获取网络上的图片并将其保存到本地计算机是一项常见的任务。以下是一个C#函数的详细解释,该函数用于实现这一功能: ```csharp public static int SaveImageFromWeb(string imgUrl, string path, string fileName) { // 检查路径是否为空 if (path.Equals("")) throw new Exception("未指定目录路径"); // 获取图片文件名和扩展名 string imgName = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("/") + 1); string defaultType = ".jpg"; string[] imgTypes = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" }; // 确定图片的类型 string imgType = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf(".")); foreach (string it in imgTypes) { if (imgType.ToLower().Equals(it)) break; if (it.Equals(".bmp")) imgType = defaultType; } // 创建HttpWebRequest对象,设置UserAgent和超时时间 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl); request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Natas.Robot)"; request.Timeout = 3000; // 发送请求并获取响应 WebResponse response = request.GetResponse(); // 检查响应的Content-Type是否以'image/'开头,确认是图片 if (response.ContentType.ToLower().StartsWith("image/")) { // 准备读取图片数据的字节数组 byte[] arrayByte = new byte[1024]; // 获取图片的总长度 int imgLong = (int)response.ContentLength; // 初始化读取进度 int l = 0; // 如果文件名为空,则使用默认的图片文件名 if (fileName == "") fileName = imgName; // 创建FileStream对象,准备写入图片数据 FileStream fso = new FileStream(path + fileName + imgType, FileMode.Create); // 循环读取图片数据并写入文件 while ((l = stream.Read(arrayByte, 0, arrayByte.Length)) != 0) { fso.Write(arrayByte, 0, l); } // 关闭流 fso.Close(); } // 返回成功代码(这里假设为0) return 0; } ``` 这个`SaveImageFromWeb`函数的主要步骤如下: 1. 检查路径:首先,函数会检查提供的`path`参数是否为空。如果为空,它将抛出一个异常。 2. 获取图片信息:从`imgUrl`中提取图片的文件名(不含扩展名)和可能的扩展名。如果无法确定扩展名,将默认设置为.jpg。 3. 创建HttpWebRequest:使用`WebRequest.Create`方法创建一个`HttpWebRequest`对象,设置UserAgent为模拟浏览器,以确保服务器能够正常响应,同时设定请求超时时间为3秒。 4. 发送请求:调用`request.GetResponse()`发送HTTP GET请求,并获取`WebResponse`对象。 5. 检查Content-Type:检查响应的`Content-Type`头部,确认其是否表示一个图像。 6. 读取并保存图片:如果响应确实是图片,创建一个`FileStream`对象,读取网络响应流中的数据,并将这些数据写入本地文件。 7. 关闭流:最后,确保所有的流(网络响应流和文件流)都被正确关闭。 这个函数提供了一个基础的框架,可以用来下载网络上的图片并保存到本地。不过,实际使用时可能需要进行一些额外的错误处理和优化,比如添加重试机制、处理网络中断等。此外,对于大文件,可能需要考虑分块读取和写入,以避免一次性加载大量数据导致内存溢出。