C#编程:从网络下载并保存图片的实现方法
3星 · 超过75%的资源 需积分: 9 171 浏览量
更新于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. 关闭流:最后,确保所有的流(网络响应流和文件流)都被正确关闭。
这个函数提供了一个基础的框架,可以用来下载网络上的图片并保存到本地。不过,实际使用时可能需要进行一些额外的错误处理和优化,比如添加重试机制、处理网络中断等。此外,对于大文件,可能需要考虑分块读取和写入,以避免一次性加载大量数据导致内存溢出。
342 浏览量
2023-05-09 上传
2024-12-01 上传
2024-11-03 上传
157 浏览量
2024-09-27 上传
2024-09-27 上传
v_ip_88888888
- 粉丝: 1
- 资源: 23