如何用Python快速搭建一个文件传输服务

news2024/11/16 13:55:40

当我的朋友需要把他电脑上面的文件从他的电脑传递到我电脑上的时候,我只需要启动服务

启动服务!

在这里插入图片描述

他打开web界面

就能把文件传递到我电脑上(还能够实时显示进度)

文件就已经在我电脑上的uploads文件夹里面了

项目结构如下

templates 存放前端html文件

​ updoad.html 上传文件的界面

uploads 存放用户上传的文件

​ 保研准备资料.zip 刚刚上传的文件

upload.py 后端服务文件

当你和朋友在同一个局域网内,当然可以直接根据主机的ip远程传输。当你们两个不在同一个网络内的时候,可以用frp内网穿透将一台主机的ip变成公网ip,也能实时进行传输了。

优点

  1. 简单快速,不需要打开qq,微信等软件传输
  2. 没有文件大小限制
  3. 进度实时显示
  4. 局域网也不需要联网,也非常快速,

后端服务搭建

用flask来搭建web服务

from flask import Flask, render_template, request, jsonify
import os

app = Flask(__name__)

UPLOAD_FOLDER = 'uploads'  # 上传文件保存的目录
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/')
def index():
    return render_template('upload.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    if file:
        filename = file.filename
        file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        file.save(file_path)
        return '文件上传成功!'

@app.route('/progress', methods=['POST'])
def progress():
    uploaded_bytes = request.form['uploadedBytes']
    total_bytes = request.form['totalBytes']
    progress = int(uploaded_bytes) / int(total_bytes) * 100
    return jsonify(progress=progress)

if __name__ == '__main__':
    app.run(debug=True)

只需要定义三个接口

  • / : 默认访问html页面,来供用户操作
  • /upload :上传文件的post接口
  • /progress : 实时显示进度的post接口

前台页面撰写

<!doctype html>
<html>
  <head>
    <title>文件上传</title>
    <script>
      function uploadFile() {
        var fileInput = document.getElementById('file');
        var file = fileInput.files[0];

        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/upload');

        xhr.upload.onprogress = function(event) {
          if (event.lengthComputable) {
            var progress = Math.round((event.loaded / event.total) * 100);
            document.getElementById('progress').innerText = progress + '%';
          }
        };

        xhr.onload = function() {
          if (xhr.status === 200) {
            document.getElementById('progress').innerText = '上传完成';
          }
        };

        var formData = new FormData();
        formData.append('file', file);
        xhr.send(formData);
      }

      function updateProgress() {
        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/progress');

        xhr.onload = function() {
          if (xhr.status === 200) {
            var progress = JSON.parse(xhr.responseText).progress;
            document.getElementById('progress').innerText = progress + '%';
          }
        };

        xhr.send();
      }

      setInterval(updateProgress, 1000);  // 每秒更新一次进度

    </script>
  </head>
  <body>
    <h1>文件上传</h1>
    <input type="file" id="file">
    <button onclick="uploadFile()">上传</button>
    <div id="progress"></div>
  </body>
</html>

只需要执行两个函数就行

  • onload() : 文件上传函数,调用后台的 upload 上传文件接口
  • updateProgress() : 定时访问后台显示进度的 progress 接口,来获取文件上传的进度,进度计算后展示百分比给用户

这样任何一个人都能打开浏览器把他电脑上的文件传给我了。

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

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

相关文章

python浮点运算不准确

1.问题 1.12.2的最后结果并不等于3.3 2. 解决方法 错误示范 引入了Decimal计算&#xff0c;但是计算类型是float型&#xff0c;依然计算不准确 正确解决方法 把类型转化为字符串引入计算

动手实战 | 使用 Transformers 包进行概率时间序列预测

最近使用深度学习进行时间序列预测而不是经典方法涌现出诸多创新。本文将为大家演示一个基于 HuggingFace Transformers 包构建的概率时间序列预测的案例。 概率预测 通常&#xff0c;经典方法针对数据集中的每个时间序列单独拟合。然而&#xff0c;当处理大量时间序列时&…

spring中的扩展点解析以及实践使用

文章目录 1、ApplicationContextInitializer2、BeanDefinitionRegistryPostProcessor3、BeanFactoryPostProcessor4、InstantiationAwareBeanPostProcessor5、SmartInstantiationAwareBeanPostProcessor6、BeanFactoryAware7、ApplicationContextAwareProcessor8、BeanNameAwar…

查找文件所在的具体位置

Linux Command 命令: find – walk a file hierarchy (遍历文件层次结构) ;DESCRIPTION 描述: 在指定目录下查找文件和目录, 可以使用不同的选项来过滤和限制查找的结果 ; Grammar Format $ find <在哪个路径下查找> <可选参数…> 常用选项 -name <pattern>…

【javaEE面试题(四)线程不安全的原因】【1. 修改共享数据 2. 操作不是原子性 3. 内存可见性 4. 代码顺序性】

4. 多线程带来的的风险-线程安全 (重点) 4.1 观察线程不安全 static class Counter {public int count 0;void increase() {count;} } public static void main(String[] args) throws InterruptedException {final Counter counter new Counter();Thread t1 new Thread(()…

VMware16.0安装教程和创建

许可证&#xff1a; ZF3R0-FHED2-M80TY-8QYGC-NPKYFYF390-0HF8P-M81RQ-2DXQE-M2UT6ZF71R-DMX85-08DQY-8YMNC-PPHV8设置网络 添加镜像 下载centos7镜像网址https://mirrors.aliyun.com/centos/7/isos/x86_64/?spma2c6h.25603864.0.0.d7724511YPrZpg win10镜像地址https://ww…

Linux+Docker+Gitlab+Jenkins+虚拟内存

最近想研究一下怎么自动化发布项目,于是找到了gitlab+jenkins这个组合,正好借机也研究一下最近很火的docker技术。本篇共分为五部分,分别为安装要求,内存虚拟化,安装docker,安装gitlab,安装jenkins。 一、 安装要求 1 Docker安装要求: 1.1 操作系统 Docker只支持64…

unittest单元测试

java的单元测试框架Junit和TestNG&#xff0c;python里面也有单元测试框架-unittest,相当于是一个python版的junit。python里面的单元测试框架除了unittest,还有一个pytest框架&#xff0c;但是用的比较少 unittest注意点&#xff1a; 导入unittest模块 类名的第一个字母大写&…

代码随想录算法学习心得 40 | 139. 单词拆分、背包问题总结...

一、单词拆分 链接&#xff1a;力扣 描述&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 思路如下&…

【Linux | Shell】Linux 安全系统 —— 用户、组、文件权限 - 阅读笔记

目录 一、Linux 的安全性1.1 /etc/passwd 文件1.2 /etc/shadow 文件1.3 添加新用户 —— useradd1.4 删除用户 —— userdel1.5 修改用户 —— usermod、passwd、chpasswd 二、使用 Linux 组2.1 /etc/group 文件2.2 创建新组 —— groupadd2.3 修改组 —— groupmod 三、理解文…

Jenkins可持续集成Python自动化脚本

目录 前言 一、Jenkins搭建在Windows上 二、Jenkins搭建在Linux上 &#x1f381;更多干货 完整版文档下载方式&#xff1a; 本文讲解Jenkins如何每次定时的从SVN服务器上拉取最新的代码并执行本地库里的脚本 前言 1、本地代码库目录F:\5i5jautest内有测试文件all_tests.…

Attention,注意力机制

在机器视觉任务中&#xff0c;每一张图片都有重点区域&#xff0c;而非每一个像素对模型理解图片都同等重要。 在自然语言处理任务中&#xff0c;每一段文字都有重点词语&#xff0c;而非每一个字对模型理解语句都同等重要。 如此&#xff0c;在神经网络模型中引入注意力&#…

做投票小程序线上投票制作制作图片投票链接如何做投票小程序

小程序投票活动如何做&#xff1f;很多企业在运营当中&#xff0c;都会通过投票活动来进行推广&#xff0c;从而达到吸粉、增加用户粘度等效果。而此类投票活动&#xff0c;通过小程序就可以实现&#xff0c;操作简单。 我们现在要以“时尚新态度”为主题进行一次投票活动&…

WiFi 时钟+本地温度

[ WiFi 时钟 ] [ WiFi 天气时钟 ] [ WiFi 时钟本地温度 ] 夏天到了&#xff0c;显示器上放一个时钟&#xff0c;顺便实时测量本地室温&#xff0c;看看空调工作是否正常也算是个实用制作。 用到零件共 4 个&#xff1a; 400孔面包板 &#xff08; 大号…

docker配置nacos

1 拉取nacos镜像并启动 docker pull nacos/nacos-server 2 启动nacos命令 docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODEhostname -e MODEstandalone nacos/nacos-server 至此&#xff0c;我们已经可以使用nacos服务&#xff0c;UI地址:http://:8848/nacos …

计算机体系结构基础知识介绍之高级分支预测(二)

一、标记混合预测器 分支预测的目的是根据历史信息来预测分支指令的跳转方向和目标地址&#xff0c;从而提高流水线的效率。不同的分支预测方法有不同的优缺点&#xff0c;因此有人提出了一种将多种预测方法结合起来的方案&#xff0c;混合预测器。这种方案可以根据不同的分支…

适合Docker的场景以及不适合的场景

文章来自&#xff1a;When to use and when not to use Docker和7 Cases When You Should Not Use Docker&#xff0c;以及互联网网上的一些零散内容。这篇文章只是基于我自己的理解&#xff0c;进行简单的概述。 适合的场景 你的团队不是一成不变的。 当有新的成员加入&#…

写作技巧:如何让你的文章充满生命力?

在写作中&#xff0c;让文章充满生命力是很重要的一点。如果一篇文章缺乏生命力&#xff0c;那么读者很难被吸引&#xff0c;也很难从中获得任何收获。那么&#xff0c;如何让你的文章充满生命力呢&#xff1f; 以下是几个建议&#xff1a; 1.真实感情&#xff1a;写作的时候要…

Django_视图中的request对象详解(八)

目录 Request 属性 方法 QueryDict 源码等资料获取方法 Request 当URLconf文件匹配到用户输入的路径后&#xff0c;会调用对应的view函数&#xff0c;并创建一个包含请求元数据的 HttpRequest 对象 传入该函数的第一个参数&#xff0c;常用request表示。 HttpRequest实…

为什么要学习使用C++软件常用分析工具?学会这些工具都有哪些好处?

目录 1、为什么要学习使用C软件常用分析工具&#xff1f; 2、C常用分析工具有哪些&#xff1f;都能处理哪些具体的问题&#xff1f; 2.1、SPY 2.2、Dependency Walker 2.3、GDIView 2.4、Process Explorer 2.5、Process Monitor 2.6、调试器Windbg 2.7、反汇编工具IDA…