C#编程:从网络下载并保存图片的实现方法
3星 · 超过75%的资源 需积分: 9 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. 关闭流:最后,确保所有的流(网络响应流和文件流)都被正确关闭。
这个函数提供了一个基础的框架,可以用来下载网络上的图片并保存到本地。不过,实际使用时可能需要进行一些额外的错误处理和优化,比如添加重试机制、处理网络中断等。此外,对于大文件,可能需要考虑分块读取和写入,以避免一次性加载大量数据导致内存溢出。
2020-12-31 上传
2023-05-09 上传
2023-06-08 上传
2023-06-06 上传
2023-09-03 上传
2024-09-19 上传
2023-06-09 上传
v_ip_88888888
- 粉丝: 1
- 资源: 23
最新资源
- 多传感器数据融合手册:国外原版技术指南
- MyEclipse快捷键大全,提升编程效率
- 从零开始的编程学习:Linux汇编语言入门
- EJB3.0实例教程:从入门到精通
- 深入理解jQuery源码:解析与分析
- MMC-1电机控制ASSP芯片用户手册
- HS1101相对湿度传感器技术规格与应用
- Shell基础入门:权限管理与常用命令详解
- 2003年全国大学生电子设计竞赛:电压控制LC振荡器与宽带放大器
- Android手机用户代理(User Agent)详解与示例
- Java代码规范:提升软件质量和团队协作的关键
- 浙江电信移动业务接入与ISAG接口实战指南
- 电子密码锁设计:安全便捷的新型锁具
- NavTech SDAL格式规范1.7版:车辆导航数据标准
- Surfer8中文入门手册:绘制等高线与克服语言障碍
- 排序算法全解析:冒泡、选择、插入、Shell、快速排序