C# WebClient 设置超时 下载文件
class ThisWebClient : WebClient{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
request.Timeout = 60000;//设置超时为1分钟
request.ReadWriteTimeout = 60000;
return request;
}
}
/// <summary>
/// 下载图片,到指定目录
/// </summary>
/// <param name="url"></param>
/// <param name="saveName"></param>
/// <param name="saveDir"></param>
private void DownImg(string url,string saveName,string saveDir)
{
textBoxMsg.AppendText("开始下载" + url + " " + DateTime.Now.ToString() + "\r\n\r\n");
ThisWebClient web = new ThisWebClient();
web.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1";
web.Headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
web.Headers["Accept-Language"] = "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3";
//如果文件夹不存在则创建
if (!Directory.Exists(saveDir))
{
Directory.CreateDirectory(saveDir);
}
//如果文件名存在则重命名 1.jpg 1-1.jpg 1-2.jpg
while (File.Exists(saveDir + "/" + saveName))
{
//文件类型拓展名//.jpg
string ext = saveName.Substring(saveName.LastIndexOf("."));
int flag = saveName.IndexOf("-");
//如果不存在图片-1.jpg
if (-1 == flag)
{
saveName = saveName.Substring(0, saveName.LastIndexOf("."));
saveName += "-1" + ext;
}
else
{
//读取数字并加1
int saveNameNum = Int32.Parse(saveName.Substring(saveName.LastIndexOf('-') + 1, saveName.LastIndexOf('.') - saveName.LastIndexOf('-') - 1));
saveNameNum++;
saveName = saveName.Substring(0, saveName.LastIndexOf("-")) + '-' + saveNameNum + ext;
}
}
//加入重试功能如出现404 或网络无法连接 重试3次
int tryCount = 0;
while (true)
{
try
{
if (2 < tryCount)
{
textBoxMsg.AppendText("下载失败 " + DateTime.Now.ToString() + "\r\n\r\n");
break;
}
web.DownloadFile(url, saveDir + "/" + saveName);
break;
}
catch (Exception e)
{
tryCount++;
//线程休眼10秒后在试
Thread.Sleep(10000);
textBoxMsg.AppendText(e.Message + "重试 " + tryCount + DateTime.Now.ToString() + "\r\n\r\n");
}
}
web.Dispose();
textBoxMsg.AppendText("下载完成" + url + " " + DateTime.Now.ToString() + "\r\n\r\n");
}
- 上一篇:asp.net 读取数据库并显示源码
- 下一篇:windows桌面程序定制开发