吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 897|回复: 4
收起左侧

[Python 原创] 监听本地文件,上传指定接口

[复制链接]
余生有妮 发表于 2024-8-20 11:09
这两天接了个私活,设备需要对接。设备厂家太low不支持对接,只能实现报告保存到指定目录。
要求:业务系统可以接收到设备的报告单;
最开始是想在设备电脑装上 apache或者Nginx  把报告目录变成http访问进行抓取,后来考虑设备电脑可能会经常关闭,会影响服务器效率就用python编写了个监听服务并且监听到文件后上传到指定接口;
代码如下
[Python] 纯文本查看 复制代码
import os
import time
import logging
from urllib.parse import urlencode

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import requests
from datetime import datetime

# 配置日志
log_directory = 'logs'
if not os.path.exists(log_directory):
    os.makedirs(log_directory)
log_filename = os.path.join(log_directory, f"{datetime.now().strftime('%Y%m%d')}.log")
logging.basicConfig(filename=log_filename, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 接口URL(上传pdf文件到)
API_URL = 'http://192.168.9.79:8080/thirdParty/boneAge/pdf'


class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if event.is_directory:
            return None

        elif event.src_path.endswith(".pdf"):
# 由于接口需要获取报告的检查时间,所以只能取文件最后修改时间来当做检查时间
            mod_time = datetime.fromtimestamp(os.path.getmtime(event.src_path)).strftime('%Y-%m-%d %H:%M:%S')
            logging.info(f"获取文件最后修改时间: {mod_time}")

            try:
                files = {'file': (os.path.basename(event.src_path), open(event.src_path, 'rb'), 'application/pdf')}

                query_params = {'update_time': mod_time}
                url_with_query = f"{API_URL}?{urlencode(query_params)}"
                logging.info(f"开始请上传报告文件 {url_with_query}")
                response = requests.post(url_with_query, files=files)
                response_data = response.json()
# 我在服务端接口返回的json格式{"status":true,"message":"成功"}
                if response_data['status']:
                    logging.info(f"File {event.src_path} : {response_data['message']}")
                else:
                    logging.error(f"文件上传失败 {event.src_path}: {response_data['message']}")
            except Exception as e:
                logging.error(f"文件上传异常 {event.src_path}: {str(e)}")


def start_observer(path):
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()


if __name__ == "__main__":
    directory_to_watch = 'D:\\AgeExpert_Data\\rep_upload_data'
    start_observer(directory_to_watch)

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
a5436539 + 1 + 1 我很赞同!
machuhai + 1 + 1 我很赞同!
kentsolver + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kentsolver 发表于 2024-8-20 12:15
首排????
感受老司机的爱 发表于 2024-8-20 12:19
Oldpit 发表于 2024-8-26 08:12
yy20240721 发表于 2024-8-26 10:04
前排前排,先占再学
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表