当前位置: 首页 > ops >正文

flask request实现两台PC之间文件传输通信

基本知识:使用Flask的request模块实现客户端和服务器端两台PC之间的传输通信。

客户端customer.py:

import requests
import time
import osfrom src.tools.resource_tool import loggerurl = "http://your_domain.com:8000/upload"def upload_file(type, file1_path, file2_path):# 设置最大重试次数和每次重试间隔时间(秒)max_retries = 5  # 最大重试次数:5retry_interval = 5  # 重试间隔时间,单位:秒retries = 0while retries < max_retries:# try:with open(file1_path, 'rb' as file1_buffer:with open(file2_path, 'rb' as file2_buffer:file1_name = os.path.basename(file1_path)file2_name = os.path.basename(file2_path)data = {"type": type}files = {'file1': (file1_name , file1_buffer), "file2": (file2_name,                     file2_buffer)}print(f"发起request请求,传输{type}文件{files.keys()}")response = requests.post(url, data=data, files=files, verify=False)# 如果服务器返回成功(状态码200),则结束重试if response.status_code == 200:print(f"Uploaded file1 and file2, return file3 successfully! "f"response.status_code={response.status_code}")# print(f"respnse.text = {response.text)}")return responseelif response.status_code == 400:print(f"Failed to return file3! Server response: {response.text}; "f"response.status_code={response.status_code}")else:logger.error(f"Unexpected status code! Server response: {response.text}; response.status_code={response.status_code}")# except requests.RequestException as e:#     print(f"Error occurred: {e}. Retrying...")# print("=============================================")retries += 1time.sleep(retry_interval)print(f"Failed after {max_retries} attempts.")if __name__ == "__main__":type = "typeA"file1_path = "./D:file1.xlsx"file2_path = "./D:file2.xlsx"upload_file(type, file1_path, file2_path)

服务器端client.py:

from flask import Flask, request, make_response
from werkzeug.serving import make_server
import os
from file1 import file1_process
from main import Main
import pythoncom
import base64app = Flask(__name__)# # 确保地址格式正确
# server_address = ('127.0.0.1', 5000)  # 本地绑定
# sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# sock.connect(server_address)server = make_server(host='0.0.0.0', port=8000, app=app, threaded=True)
print("111")@app.route('/upload', methods=['POST'])
def upload_file():print("进入upload_file")if 'file1' not in request.files or 'file2' not in request.files:return "No file in request", 400file1= request.files['file1']  # (file1_name, file1)file2 = request.files['file2']if file1.filename == '' or file2.filename == '':return 'No file name', 400json = request.form.to_dict()type= json["type"]print(f"客户端传来数据:file1:{file1}, file2:{file2}, json:{json}")print("---------------------------------------------")try:print("生成文件1结果中")file1_process_result = file1_process(type, file1)print(file1_process_result )print("---------------------------------------------")except:print("File1 process failed")return f"File1 process failed", 400try:print("生成文件2结果中")file2_process_result = file2_process(type, file2)print(file2_process_result )print("---------------------------------------------")except:print("File2 process failed")return f"File2 process failed", 400try:print("向客户端返回响应中")# with open(file1_path, 'rb') as f:# base64_data = base64.b64encode(f.read()).decode('utf-8')# with open(f'{xml_path}', 'r', encoding='utf-8') as f:# xml_data = f.read()response_data = {"file1": file1_process_result , "file2": file2_process_result}response = make_response(response_data)return responseexcept Exception as e:print(f"return response failed, e = {e}")return f"return response failed", 400

 

base64.b64encode(byte_data).decode('utf-8')的作用

base64.b64encode(byte_data).decode('utf-8') 这段代码的作用是将字节数据(byte_data)编码为Base64格式,并将结果转化为UTF-8编码的字符串。

具体步骤如下:

  1. base64.b64encode(byte_data):将输入的字节数据(如图片、文件或其他二进制数据)编码成Base64格式。Base64是一种将二进制数据转化为ASCII字符串的编码方式,通常用于在网络上传输二进制数据。

  2. .decode('utf-8'):将Base64编码后的字节对象转化为UTF-8字符串。这是因为b64encode的结果是一个字节对象,而为了便于在文本中使用,需要将其转化为字符串形式。

这个过程常用于将文件内容(如图片或文档)转为字符串,以便通过HTTP协议等文本形式传输,或者保存到数据库中。

 

flask 中的make_response()函数的参数是

在 Flask 中,make_response() 函数的参数通常是视图函数返回的数据,可以是字符串、字典、元组等。make_response() 会将这些返回值包装成一个 Response 对象。最常见的用法是将字符串、字典或元组传给 make_response(),然后返回一个完整的 HTTP 响应。

具体来说,make_response() 的常见参数:

字符串:表示响应体的内容。

from flask import make_response@app.route('/')
def index():response = make_response("Hello, World!")return response

 字典:如果返回一个字典,Flask 会将其转换为 JSON 格式的响应。

from flask import make_response, jsonify@app.route('/')
def index():data = {"message": "Hello, World!"}response = make_response(jsonify(data))return response

元组:如果返回一个元组,通常是 (body, status_code, headers) 形式,make_response() 会处理并生成相应的响应对象。

from flask import make_response@app.route('/')
def index():response = make_response("Hello, World!", 200)response.headers['Custom-Header'] = 'SomeValue'return response

因此,make_response() 的参数通常可以是字符串、字典或包含响应体、状态码、头部信息的元组

http://www.xdnf.cn/news/15530.html

相关文章:

  • 解锁 iOS 按键精灵辅助工具自动化新可能:iOSElement.Click 让元素交互更简单
  • 【AI News | 20250716】每日AI进展
  • 《C++初阶之STL》【auto关键字 + 范围for循环 + 迭代器】
  • Java双冒号操作符全面解析
  • 【面板数据】企业劳动收入份额数据集-含代码及原始数据(2007-2022年)
  • 数据驱动视角下的黄金异动解析:多因子模型验证鲍威尔去留与金价关联性
  • PyTorch笔记8----------卷积神经网络
  • 013【入门】队列和栈-链表、数组实现
  • TCP 拥塞控制算法 —— 慢启动(Slow Start)笔记
  • 【add vs commit】Git 中的 add 和 commit 之间的区别
  • HTTP协议介绍
  • 堆排序算法详解:原理、实现与C语言代码
  • Opencv---cv::minMaxLoc函数
  • 激活函数LeakyReLU
  • ai 编程工具,简单总结
  • C++设计模式之创建型模式
  • WSL2更新后Ubuntu 24.04打不开(终端卡住,没有输出)
  • Java对象的比较
  • 每日算法刷题Day49:7.16:leetcode 差分5道题,用时2h
  • 什么是数据仓库?数据库与数据仓库有什么关系?
  • 格密码--Ring-SIS和Ring-LWE
  • Python 日志轮换处理器的参数详解
  • 【python】sys.executable、sys.argv、Path(__file__) 在PyInstaller打包前后的区别
  • C语言:第07天笔记
  • smolagents - 如何在mac用agents做简单算术题
  • STM32外设介绍3:(UART 和 USART 通信详解<含重定向与 DMA>)
  • 大端序与小端序
  • 【机器学习】数据理解:数据导入、数据审查与数据可视化
  • 2.库操作
  • 自动驾驶激光3D点云处理系统性阐述及Open3D库函数应用