ftp_file_pyinotify_bzy.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. # encoding:utf-8
  4. # 注意:import顺序很重要
  5. import re
  6. import os, sys
  7. # 将django项目根目录加入环境变量
  8. BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 定位到你的django根目录
  9. sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir)))
  10. # 引入django配置文件
  11. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yfwlw_pro.settings") # 你的django的settings文件
  12. # 启动django
  13. import django
  14. django.setup()
  15. import requests
  16. from PIL import Image
  17. from io import BytesIO
  18. import datetime
  19. import sys
  20. from apps.EquipManage.views import CJSONEncoder
  21. import json
  22. import re
  23. from pyinotify import WatchManager, Notifier, \
  24. ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY
  25. from apps.AppInfoManage.models import Alarm_record, BZYphoto, Equip, Equip_Forward, Equip_type, MyUser
  26. class EventHandler(ProcessEvent):
  27. """事件处理"""
  28. def process_IN_CREATE(self, event):
  29. print ("Create file: %s " % os.path.join(event.path, event.name))
  30. if event.name.endswith(".jpg"):
  31. nowtime = datetime.datetime.now().strftime('%Y%m%d')
  32. origin = sys.stdout
  33. f = open('../logs/'+nowtime+'bzy.txt','a+')
  34. sys.stdout = f
  35. print("new file upload is ok!")
  36. print("type event.path:",type(event.path))
  37. print("event.path:",event.path)
  38. print("event.name:",event.name)
  39. # imei = re.findall(r"/(.+?)/",event.path)
  40. imei = re.findall(r"\d+\.?\d*",event.path)[0]
  41. print("imei:", imei)
  42. # 判断设备是否存在:
  43. if Equip.objects.filter(equip_id=imei).exists():
  44. equip = Equip.objects.get(equip_id=imei)
  45. img_addr = "pyftp/" + os.path.join(event.path, event.name)
  46. if BZYphoto.objects.filter(addr=img_addr).exists():
  47. pass
  48. else:
  49. BZYphoto.objects.create(equip_id=equip, addr=img_addr)
  50. print("图片增加链接成功!")
  51. try:
  52. if Equip_Forward.objects.filter(equip_id=imei).exists():
  53. equip_list = Equip_Forward.objects.get(equip_id=imei)
  54. # if equip.ftp_addr:
  55. # http://120.27.222.26/cbd/pyftp/ftp_file/ykm_cbd/868575028845867/20190305/20:56:15.jpg
  56. ftp_addr = equip_list.equip_img_url
  57. pattern = r'[#]'
  58. split_result = re.split(pattern, ftp_addr)
  59. print("split_result:",split_result)
  60. try:
  61. img_addr_1 = "http://120.27.222.26/" + "bzy/" + img_addr
  62. print("img_addr_1:",img_addr_1)
  63. data = {
  64. "Image":img_addr_1,
  65. "imei":imei
  66. }
  67. data = json.dumps(data, cls=CJSONEncoder)
  68. print("data:",data)
  69. print("url:",split_result[0])
  70. if equip_list.equip_img_between == "1":
  71. res_1 = requests.post(split_result[0],data=data,timeout=2)
  72. elif equip_list.equip_img_between == "2":
  73. headers = {"Content-Type": "application/json; charset=UTF-8", 'Connection': 'close'}
  74. res_1 = requests.post(split_result[0], data=data, timeout=3,headers=headers)
  75. print("res_1:",res_1.text)
  76. # 判断文件大小的方法
  77. # path = 'F:\YFWLW\yfwlw\\16_19_21.jpg'
  78. # size = os.path.getsize(path)/1024
  79. print("------------------对接设备图片发送成功!!!")
  80. except Exception as aexc:
  81. print(aexc)
  82. print("------------------对接设备图片发送失败!!!")
  83. except Exception as exce:
  84. print(exce)
  85. print("!!!")
  86. else:
  87. print("该设备不存在")
  88. sys.stdout = origin
  89. f.close()
  90. def process_IN_DELETE(self, event):
  91. print ("Delete file: %s " % os.path.join(event.path, event.name))
  92. # imei = re.findall(r"\d+\.?\d*",event.path)[0]
  93. # img_addr = "pyftp/" + os.path.join(event.path, event.name)
  94. # img_addr = "/home/web/yfwlw/" + img_addr[0:-9]
  95. # print("image_addr:",img_addr)
  96. # print("判断是否存在:",os.path.exists(img_addr))
  97. if event.name.endswith(".jpg"):
  98. print("file delete is ok!")
  99. # def process_IN_MODIFY(self, event):
  100. # print ("Modify file: %s " % os.path.join(event.path, event.name))
  101. def FSMonitor(path='.'):
  102. wm = WatchManager()
  103. mask = IN_DELETE | IN_CREATE | IN_MODIFY
  104. notifier = Notifier(wm, EventHandler())
  105. wm.add_watch(path, mask, auto_add=True, rec=True)
  106. print('ftp file watchdog is running')
  107. print('now starting monitor %s' % (path))
  108. while True:
  109. try:
  110. notifier.process_events()
  111. if notifier.check_events():
  112. notifier.read_events()
  113. except KeyboardInterrupt:
  114. notifier.stop()
  115. break
  116. if __name__ == "__main__":
  117. FSMonitor('ftp_file/bzy_photo')