AdvertManager.cs 5.6 KB

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