123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- using MySql.Data.MySqlClient;
- using parkMonitor.LOG;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- namespace centralController.advert
- {
- public class AdvertManager
- {
- /// <summary>
- /// 从数据库获取URL,更新本地广告文件
- /// </summary>
- /// <returns></returns>
- public bool UpdateAdvert(out string notification)
- {
- bool result = true;
- notification = "";
- List<string> urls = new List<string>();
- if (Monitor.Monitor.remoteDBOper != null)
- {
- //获取URLs
- string getAdvertUrlSql = "select advertUrl from advert;";
- MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(getAdvertUrlSql);
- if (reader != null)
- {
- try
- {
- while (reader.Read() && reader.HasRows)
- {
- urls.Add(reader.GetString("advertUrl"));
- }
- }
- catch { result = false; }
- try
- {
- reader.Close();
- reader.Dispose();
- }
- catch { result = false; }
- }
- notification += "url读取结果:\n";
- //删除本地文件,下载url中文件到本地
- try
- {
- if (!Directory.Exists(Monitor.Monitor.advertPath))
- {
- Directory.CreateDirectory(Monitor.Monitor.advertPath);
- }
- }
- catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "路径创建异常"); result = false; }
- try
- {
- string[] fileList = Directory.GetFileSystemEntries(Monitor.Monitor.advertPath);
- if (fileList.Length == 0)
- {
- for (int i = 0; i < fileList.Length; i++)
- {
- File.Delete(fileList[i]);
- }
- }
- }
- catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件或删除文件异常\n" + e.Message); }
- try
- {
- if (Directory.Exists(Monitor.Monitor.advertPath + @"\temp"))
- Directory.Delete(Monitor.Monitor.advertPath + @"\temp", true);
- }
- catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件夹或删除文件夹异常\n" + e.Message); }
- if (result && urls.Count() > 0)
- {
- List<string>.Enumerator enumer = urls.GetEnumerator();
- while (enumer.MoveNext())
- {
- string fileName = Path.GetFileName(enumer.Current);
- bool response = HttpDownload(enumer.Current, Monitor.Monitor.advertPath + @"\" + fileName);
- result = result || response;
- notification += (response?"成功:":"失败:")+fileName+"\n";
- }
- }
- }
- return result;
- }
- /// <summary>
- /// http下载文件
- /// </summary>
- /// <param name="url">下载文件地址</param>
- /// <param name="path">文件存放地址,包含文件名</param>
- /// <returns></returns>
- private bool HttpDownload(string url, string path)
- {
- string tempPath = System.IO.Path.GetDirectoryName(path) + @"\temp";
- System.IO.Directory.CreateDirectory(tempPath); //创建临时文件目录
- string tempFile = tempPath + @"\" + System.IO.Path.GetFileName(path) + ".temp"; //临时文件
- if (System.IO.File.Exists(tempFile))
- {
- System.IO.File.Delete(tempFile); //存在则删除
- }
- try
- {
- FileStream fs = new FileStream(tempFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
- // 设置参数
- HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
- //发送请求并获取相应回应数据
- HttpWebResponse response = request.GetResponse() as HttpWebResponse;
- //直到request.GetResponse()程序才开始向目标网页发送Post请求
- Stream responseStream = response.GetResponseStream();
- //创建本地文件写入流
- //Stream stream = new FileStream(tempFile, FileMode.Create);
- byte[] bArr = new byte[1024];
- int size = responseStream.Read(bArr, 0, (int)bArr.Length);
- while (size > 0)
- {
- //stream.Write(bArr, 0, size);
- fs.Write(bArr, 0, size);
- size = responseStream.Read(bArr, 0, (int)bArr.Length);
- }
- //stream.Close();
- fs.Close();
- responseStream.Close();
- System.IO.File.Move(tempFile, path);
- return true;
- }
- catch (Exception ex)
- {
- Log.WriteLog(LogType.process, LogFile.ERROR, "获取url:" + url + "失败\n" + ex.Message);
- return false;
- }
- }
- }
- }
|