FtpTimer.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using EMISOnline.WinService.Common;
  5. using System.Configuration;
  6. using System.IO;
  7. using System.Text.RegularExpressions;
  8. using DSOFile;
  9. namespace EMISOnline.WinService
  10. {
  11. public class FtpTimer
  12. {
  13. public FtpTimer()
  14. {
  15. }
  16. public void CheckFiles()
  17. {
  18. Log.Info(this.GetType().ToString(), "Start checking...");
  19. //获取已经上传成功的文件
  20. List<string> overFiles = UploadOverFiles();
  21. //获取所有可以转换的文件
  22. List<FileInfo> lists = FileHelper.GetAllFiles(Config.FtpPath,Config.FtpFileType);
  23. foreach (FileInfo file in lists)
  24. {
  25. string Comments = FileHelper.GetFilePropertiesComments(file.FullName);
  26. if (string.IsNullOrEmpty(Comments)) Comments = "";
  27. //已经标识为上传完成的文件不在进行检查了。
  28. if (Comments.IndexOf("UploadOver") >= 0) continue;
  29. bool isUpLoadOver = overFiles.Contains(file.FullName.ToLower());
  30. Log.Info(this.GetType().ToString(), "检查到文件:" + file.FullName + " 是否上传成功:" + isUpLoadOver.ToString());
  31. //如果文件已经上传成功,修改文件备注为上传成功,后续不在检查该文件是否上传成功。
  32. //这样FTP文件过多的时候会提高性能。
  33. //在FTP权限中需要,禁止用户删除、修改、移动该文件。
  34. if (isUpLoadOver)
  35. {
  36. FileHelper.SaveFilePropertiesComments(file.FullName, "UploadOver");
  37. //通知教学平台有这样的一个文件已经上传成功,可以进行MP4播放。
  38. //m3u8的播放模式需要等待m3u8转换时序来完成转换
  39. string mp4Url = Config.FTPServer + file.FullName.Replace(Config.FtpPath, "").Replace("\\", "/");
  40. M3u8Timer.SaveFtpFile(file.FullName, "",mp4Url, "", file.Name, 1);
  41. }
  42. else
  43. {
  44. //通知教学平台有这样的一个文件正在上传
  45. M3u8Timer.SaveFtpFile(file.FullName, "", "", "", file.Name, 0);
  46. }
  47. }
  48. }
  49. public List<string> UploadOverFiles()
  50. {
  51. List<string> lines = FileHelper.ReadTxt(Config.ServUFile);
  52. List<string> rtn = new List<string>();
  53. foreach (string line in lines)
  54. {
  55. //[4] Tue 13Dec16 15:43:14 - (004137) Received file c:\web\mvcapp2\ftpmp4\install cmd.txt successfully (1.23 Kb/sec - 115 bytes)
  56. Match match = Regex.Match(line, Config.ServURegex);
  57. if (match.Success)
  58. {
  59. if (rtn.Contains(match.Groups[1].Value)) continue;
  60. rtn.Add(match.Groups[1].Value);
  61. //Log.Info("UploadOverFiles", match.Groups[1].Value);
  62. }
  63. }
  64. return rtn;
  65. }
  66. }
  67. }