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

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.dtcms.com/a/285239.html

相关文章:

  • 华夏基金(ChinaAMC)推出全球首只人民币计价的代币化货币基金
  • AUTOSAR进阶图解==>AUTOSAR_SWS_BusMirroring
  • lombok版本过低导致@SuperBuilder注解编译无法通过(java: 类型变量数目错误; 需要3)
  • Fiddler 中文版在移动开发中的调试应用 从抓包到性能调优
  • CMSIS DSP FFT
  • Linux探秘坊-------15.线程概念与控制
  • 内容安全策略(CSP)详解:Web安全的关键防线
  • SegNet:一种用于图像分割的深度卷积编码器解码器架构
  • 简单易懂,动态分区分配算法
  • Leetcode刷题营第二十九,三十题:二叉树的中序以及后序遍历
  • mongosh 安装记录
  • ruoyi-cloud启动常见问题处理
  • set、map 比数组,json 对象的性能更好原因分析
  • Python元组(Tuple)指南
  • [RAG system] 信息检索器 | BM25 Vector | Pickle格式 | HybridRetriever重排序
  • 教资科三【信息技术】— 学科知识: 第二章(计算机系统基础)
  • 【程序地址空间】虚拟地址与页表转化
  • 自己训练大模型?MiniMind 全流程解析 (二) 监督微调SFT
  • 【Bluedroid】A2dp Sink初始化(init_sink)源码分析[2]:btif_a2dp_sink_init
  • JAVA几个注解记录
  • 【Spring AI Alibaba实战Demo】通过Spring AI Alibaba接入本地部署的大模型和线上大模型,实现流式简单对话
  • Ubuntu FTP服务搭建与配置
  • Product Hunt 每日热榜 | 2025-07-17
  • druid连接池
  • Xss-labs 靶场lever1~lever8通关练习
  • 第12章 存储类、链接和内存管理
  • window下 wsl 下怎么配置 kimi-k2 驱动 Claude Code
  • 网络通信原理
  • 订货系统能接金蝶吗是什么?
  • FreeRTOS—中断管理