AdvertManager.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using MySql.Data.MySqlClient;
  2. using parkMonitor.LOG;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace centralController.advert
  11. {
  12. public class AdvertManager
  13. {
  14. /// <summary>
  15. /// 从数据库获取URL,更新本地广告文件
  16. /// </summary>
  17. /// <returns></returns>
  18. public bool UpdateAdvert()
  19. {
  20. bool result = true;
  21. List<string> urls = new List<string>();
  22. if (Monitor.Monitor.remoteDBOper != null)
  23. {
  24. //获取URLs
  25. string getAdvertUrlSql = "select advertUrl from advert;";
  26. MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(getAdvertUrlSql);
  27. if (reader != null)
  28. {
  29. try
  30. {
  31. while (reader.Read() && reader.HasRows)
  32. {
  33. urls.Add(reader.GetString("advertUrl"));
  34. }
  35. }
  36. catch { result = false; }
  37. try
  38. {
  39. reader.Close();
  40. reader.Dispose();
  41. }
  42. catch { result = false; }
  43. }
  44. //删除本地文件,下载url中文件到本地
  45. try
  46. {
  47. if (!Directory.Exists(Monitor.Monitor.advertPath))
  48. {
  49. Directory.CreateDirectory(Monitor.Monitor.advertPath);
  50. }
  51. }
  52. catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "路径创建异常"); result = false; }
  53. try
  54. {
  55. string[] fileList = Directory.GetFileSystemEntries(Monitor.Monitor.advertPath);
  56. if (fileList.Length == 0)
  57. {
  58. for (int i = 0; i < fileList.Length; i++)
  59. {
  60. File.Delete(fileList[i]);
  61. }
  62. }
  63. }catch(Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件或删除文件异常\n"+e.Message); }
  64. try
  65. {
  66. if (Directory.Exists(Monitor.Monitor.advertPath + @"\temp"))
  67. Directory.Delete(Monitor.Monitor.advertPath + @"\temp",true);
  68. }
  69. catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件夹或删除文件夹异常\n"+e.Message); }
  70. if (result && urls.Count() > 0)
  71. {
  72. Task.Factory.StartNew(() =>
  73. {
  74. List<string>.Enumerator enumer = urls.GetEnumerator();
  75. while (enumer.MoveNext())
  76. {
  77. string fileName = Path.GetFileName(enumer.Current);
  78. bool response = HttpDownload(enumer.Current, Monitor.Monitor.advertPath + @"\" + fileName);
  79. result = result && response;
  80. }
  81. });
  82. }
  83. }
  84. return result;
  85. }
  86. /// <summary>
  87. /// http下载文件
  88. /// </summary>
  89. /// <param name="url">下载文件地址</param>
  90. /// <param name="path">文件存放地址,包含文件名</param>
  91. /// <returns></returns>
  92. private bool HttpDownload(string url, string path)
  93. {
  94. string tempPath = System.IO.Path.GetDirectoryName(path) + @"\temp";
  95. System.IO.Directory.CreateDirectory(tempPath); //创建临时文件目录
  96. string tempFile = tempPath + @"\" + System.IO.Path.GetFileName(path) + ".temp"; //临时文件
  97. if (System.IO.File.Exists(tempFile))
  98. {
  99. System.IO.File.Delete(tempFile); //存在则删除
  100. }
  101. try
  102. {
  103. FileStream fs = new FileStream(tempFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  104. // 设置参数
  105. HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  106. //发送请求并获取相应回应数据
  107. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  108. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  109. Stream responseStream = response.GetResponseStream();
  110. //创建本地文件写入流
  111. //Stream stream = new FileStream(tempFile, FileMode.Create);
  112. byte[] bArr = new byte[1024];
  113. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  114. while (size > 0)
  115. {
  116. //stream.Write(bArr, 0, size);
  117. fs.Write(bArr, 0, size);
  118. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  119. }
  120. //stream.Close();
  121. fs.Close();
  122. responseStream.Close();
  123. System.IO.File.Move(tempFile, path);
  124. return true;
  125. }
  126. catch (Exception ex)
  127. {
  128. Log.WriteLog(LogType.process, LogFile.ERROR, "获取url:" + url + "失败\n" + ex.Message);
  129. return false;
  130. }
  131. }
  132. }
  133. }