用POST请求在Linux之间传输文件(Python在Linux间传输文件)

news2024/11/28 9:37:53

背景

实际需求:

  • 已通过iperf和dd命令测试过两台不同区域之间的Linux服务器带宽,均为1000Mb网络。
  • 但发送post请求传输文件至对象存储时,总是卡在14Mb/s。
  • 除了排查区域之间的防火墙,也应该尝试检查Linux(KylinV10)之间是否存在默认系统配置限制了POST请求发送文件的带宽。
  • 因此:须在两台KylinV10之间直接通过POST请求发送文件,通过iftop监控网络带宽,排除操作系统对post带宽限制的可能。

解决:

  • A服务器上使用python编写server端程序,接收post请求,并将文件转存至文件目录。
  • B服务器上创建测试文件,通过post请求发送至A服务器。
  • 在A/B上运行iftop工具监控网络带宽、检查目标目录是否成功转存文件。

扩展:

  • 在禁用ssh和22端口的情况下,可通过rest接口在Linux之间传输大文件。

解决

1.安装python依赖库:flask和request

在A服务器上安装python程序需要的环境

dnf install python3
dnf install python3-pip
pip install requests -i https://mirrors.aliyun.com/pypi/simple/
pip install flask -i https://mirrors.aliyun.com/pypi/simple/

离线安装python和pip模块时,可下载我整理的rpm和whl压缩包(资源已上传,等待审核),上传至Linux服务器解压后执行以下命令:

#使用本地repo源安装python
tar -zxvf czm-231108-KylinV10-PythonREST.tgz 
cp python-rpm/python.repo /etc/yum.repos.d/
sudo dnf install python3
sudo dnf install python3-pip
#pip安装本地whl模块
cd pip-module/
ll
total 1216
-rw-r--r-- 1 sysma sysma 158334 Nov  8 14:40 certifi-2023.7.22-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 136822 Nov  8 14:40 charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-rw-r--r-- 1 sysma sysma  97941 Nov  8 14:40 click-8.1.7-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 101817 Nov  8 14:40 Flask-2.2.5-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  61538 Nov  8 14:40 idna-3.4-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  22934 Nov  8 14:40 importlib_metadata-6.7.0-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  15749 Nov  8 14:40 itsdangerous-2.1.2-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 133101 Nov  8 14:40 Jinja2-3.1.2-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  25427 Nov  8 14:40 MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-rw-r--r-- 1 sysma sysma  62574 Nov  8 14:39 requests-2.31.0-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  33232 Nov  8 14:40 typing_extensions-4.7.1-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 124213 Nov  8 14:40 urllib3-2.0.7-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 233551 Nov  8 14:40 Werkzeug-2.2.3-py3-none-any.whl
-rw-r--r-- 1 sysma sysma   6758 Nov  8 14:40 zipp-3.15.0-py3-none-any.whl

pip install --no-index --find-link=flask flask

2.编写server端程序:接收post传输文件请求

在A服务器上创建python程序文件,直接复制后续代码,存储为xxx.py文件即可运行,此处我命名为01-PostReciveFile.py

具体程序代码如下:

from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])		#指定接口名称为upload,指定请求方法为POST
def upload_file():
    if 'file' not in request.files:
        return 'No file part in the request', 400
    file = request.files['file']
    if file.filename == '':
        return 'No selected file', 400
    if file:
        file.save('/opt/' + file.filename)   #将接收的文件转存至/opt目录,可以改为任意目录,但要保证程序运行所属用户对目录有写权限。
        return 'File uploaded successfully', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)	#指定程序使用的端口,可改为其它任意非系统端口。

然后即可直接运行程序 python 01-PostReciveFile.py,示例如下:

[root@jenkins ~]# python 01-PostReciveFile.py 
 * Serving Flask app '01-PostReciveFile'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://10.42.40.27:5000
Press CTRL+C to quit

出现上述内容即表明程序已经启动,监听端口为5000,上传接口为/upload。

3.创建测试文件:dd创建文件

在B服务器上创建测试文件,执行dd命令即可。of指定了testfile-2GB.mp4是要创建的文件名,bs=1M表示每个块的大小为1MBcount=2048表示要创建2048个块,可根据需要创建不同大小的文件。示例如下

dd if=/dev/zero of=testfile-2GB.mp4 bs=1M count=2048	#创建一个2GB文件
dd if=/dev/zero of=testfile-100MB.mp4 bs=1M count=100	#创建一个100MB文件

4.发起post请求传输文件

file=@后填入将要传输的测试文件,带路径也行,然后发送请求到运行server端程序的A服务器:
此处我的A(server端)服务器是10.42.40.27

 curl -X POST -F "file=@testfile-100MB.mp4 " http://10.42.40.27:5000/upload

5.监控网络带宽,检查文件转存状态

kylinV10\RockyLinux9\CentOS7都没有默认安装iftop命令,使用默认安装包源,使用yumdnf都没办法直接安装的话,直接下载这个安装包【iftop-1.0-0.21.pre4.el7.x86-64.rpm】,然后执行rpm -ivh 即可,确认该安装包可在el7和el8上安装。

rpm -ivh iftop-1.0-0.21.pre4.el7.x86_64.rpm 
[root@localhost python-rpm]# rpm -ivh iftop-1.0-0.21.pre4.el7.x86_64.rpm 
警告:iftop-1.0-0.21.pre4.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:iftop-1.0-0.21.pre4.el7          ################################# [100%]
[root@localhost python-rpm]# 

在这里插入图片描述
在这里插入图片描述

结束

结论: post直接传输文件时,网络带宽没有限制。至少验证了KylinV10没有对POST请求带宽做限制。
进一步排查: 已确认2台不通区域Linux之间访问带宽低的问题原因是物理防火墙策略造成,已处理。

扩展

突然反应过除了测试,还有一个更好的使用场景:
在Linux的22端口被关闭、ssh协议被禁用的情况下,SCP命令无法使用的情况下,你可以通过REST接口指定其它TCP端口来传输文件了,朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

家用AIO系统架构图(Openwrt 群晖 IPV6 DDNS)

折腾几个月了,摸索出的最合适的系统架构。其余的系统架构也都行得通,但是从逻辑角度,下列方案更加的自然通顺。 系统架构图 疑问解答 为什么用IPV6? 2222年了都不会真有人能从运营商哪里搞到ipv4或者还没有ipv6吧。 光猫为什么桥接? 抠门运…

Maven-构建生命周期与插件

一、概念和基础 Maven针对项目的构建和发布定义了一系列明确的步骤,根据作用不同这些步骤分属于不同的生命周期。Maven针对每个步骤都有对应的默认插件,Maven在构建过程中是通过调用这些插件完成整个过程的。开发者只需要通过简单的命令就可以驱动maven…

layui table合计 totalRow 保留4位小数\ 异步请求数据的表格 新增行之后 如何更新数据

layui table合计 totalRow 保留4位小数: 例: totalRowMethod:(column: any, dataSource: any[]) > { let total 0; dataSource.forEach((item) > { total total Number(item[column.key]); …

公益理发暖人心,爱心助老绿萝先行

为更好地关爱老年人的生活,为老年人带来更实在的便利,2023年11月8日,绿萝志愿服务队从老人们的实际需求出发,在拱辰一街二社区开展关爱空巢老人助老志愿活动。 绿萝理发师志愿者们又一次来到老人们熟悉的场地,为老人们…

Qt 二维码生成与识别

1.简介 QZXing是一个基于Qt框架的二维码解码库,它是对ZXing(Zebra Crossing)开源项目的一个Qt封装。ZXing是一个功能强大的开源二维码解码库,支持多种类型的码,包括QR码、DataMatrix码、Aztec码等。 QZXing提供了一个…

PTA_乙级_1011

#include<iostream> using namespace std;int main(){long long A,B,C,T;// 注意AB如果特别大是可能超过int类型最大范围所以用longlong最好// 在C中&#xff0c;int 类型的范围通常是在-2147483648到2147483647之间&#xff0c;这是32位有符号整数的范围。// 在C中&…

软件开发项目文档系列之十四如何撰写系统试运行报告

目录 1 系统试运行的平台及网络环境1.1 系统软件平台1.2 系统网络环境 2 系统概要说明2.1 系统主要模块2.2 系统权限 3 系统试运行的工作时间3.1 集中培训时间3.2 系统试运行环境搭建3.3 系统试运行阶段 4 系统试运行的用户对象和受众范围5 系统试运行对提高工作效率的作用分析…

互联网企业该如何进行风险管理

谈到风险管理&#xff0c;首先我们应该了解如何评估威胁。 威胁可以根据攻击的类型和目标来分类。STRIDE是微软开发出来对计算机安全威胁进行分类的威胁建模系统。 STRIDE代表&#xff1a; 假冒篡改抵赖信息披露拒绝服务提升权限 假冒 即试图通过使用错误的ID访问某个系…

牛客网:链表分割

一、题目 函数原型&#xff1a; ListNode* partition(ListNode* pHead, int x) 二、思路 根据题意&#xff0c;可以设置两个新的链表&#xff0c;将原链表中所有小于x的结点链接到链表1中&#xff0c;大于x的结点链接到链表2中&#xff0c;最后再将两个链表合并即可。 此题有两…

HT4344 2通道 立体声 DAC转换器的特性

HT4344 2通道 立体声 DAC转换器的特性&#xff1a; 1.支持多种音频数字输入格式, 支持24-bit字节 2.可自动检测采样频率&#xff0c;Z高192kHz 3.105dB动态范围 4.-90dB THDN 5.集成多比特位的Δ-Σ调制器 6.支持3.3V/5V单电源供电 7.具有强抗时钟抖动能力 8.内部集成输…

ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校学生课堂考勤系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转…

【违规处罚工作公示】10月30日-11月5日

10月30日至11月5日期间&#xff0c;共计对64,852个违规账号进行了封禁&#xff0c;其中57,954个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

感恩同行 | 这个火鸡节,我们一起好好过

社区收过 NebulaGraph 明信片的小伙伴&#xff0c;可能最常见到的词汇便是&#xff1a;谢谢。谢谢你的到来&#xff0c;让这个社区变得更有意思&#xff0c;更加多元。恰好&#xff0c;我们可人贴心的海外小姐姐 wenting 想给国际友人们来一个火鸡派对&#xff0c;一起过个感恩…

【小黑嵌入式系统第八课】初识PSoC Creator™开发——关于PSoC Creator下载、创建项目、单片机中的hello world(点亮一个led)

上一课&#xff1a; 【小黑嵌入式系统第七课】PSoC 5LP 开发套件&#xff08;CY8CKIT-050B &#xff09;——PSoC 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现 文章目录 一、关于PSoC Creator1、PSoC Creator简介2、下载 二、创建项目三、led闪烁项目 一、关于PSoC Creator …

使用 AIGC ,ChatGPT 快速合并Excel工作薄

职场数据处理&#xff0c;数据分析汇报与统计的过程中&#xff0c;经常会遇到这样的一个问题那就是需要统计的数据源在多个文件中&#xff0c;多个工作薄中&#xff0c;如果要进行数据处理&#xff0c;汇总的时候会很不方便 例如&#xff1a; 如果要汇总6个月的数据可能就得需…

车企内部文件传输数据效率太慢?那是没找到合适的文件传输工具

在汽车行业&#xff0c;文件传输是一项不可或缺的工作。无论是内部协作还是上下游交互&#xff0c;都需要高效、安全、便捷的文件传输工具。然而&#xff0c;很多车企还在使用传统的文件传输方式&#xff0c;如邮件、U盘、FTP等&#xff0c;这些方式存在很多问题&#xff0c;比…

GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优

★OpenAI&#xff1b;ChatGPT;Sam Altman&#xff1b;Assistance API&#xff1b;GPT4 Turbo&#xff1b;DALL-E 3&#xff1b;多模态交互&#xff1b;算力调度&#xff1b;算力调优&#xff1b;大模型训练&#xff1b;GH200&#xff1b;snowflake&#xff1b;AGI&#xff1b;A…

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论 123.1 计算机的组成 目前的计算机都还是 冯诺依曼体系 &#xff0c;也就是由&#xff1a;输入、输出、运算器、存储器、控制器&#xff0c;这个五个部分构成。输入&#xff1a;Input&#xff0c;常见的输入设备&#xff0c;比如鼠标&#xff0c;键…

【halcon】select_shape 值高宽比例选择

今天&#xff0c;发现一个小技巧分享给小伙伴们。 select_shape&#xff0c;这算子用的非常的多&#xff0c;平时我主要用来选择面积&#xff0c;位置&#xff0c;长宽等等。 今天&#xff0c;我在筛选瑕疵的时候&#xff0c;有很多细长的区域&#xff0c;不是我想要的&#…

新一日分享

本人对单片机领域感兴趣&#xff0c;已经写了34篇CSDN原创文章&#xff0c;有兴趣可以互关噢!