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

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

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

启动服务!


他打开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 接口,来获取文件上传的进度,进度计算后展示百分比给用户

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


相关文章
|
4月前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
28天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
1月前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
220 3
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
174 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
使用Python实现深度学习模型:智能客户服务与支持
使用Python实现深度学习模型:智能客户服务与支持
35 6
|
2月前
|
网络协议 Python
|
3月前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
52 18
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
摘要分享服务python版
【10月更文挑战第3天】本文介绍了将链接转换为标题和内容摘要的技术,包括抽取式和生成式摘要方法。抽取式摘要通过提取关键句子生成摘要,而生成式摘要则通过理解语义生成新句子。文中还详细描述了链接预览生成的实现过程,从链接识别到内容解析,再到预览卡片生成,并提供了Python代码示例。这些技术提高了信息的可读性和访问效率。
17 0
|
4月前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
4月前
|
网络安全 数据安全/隐私保护 Python
Python 渗透测试:文件传输爆破( 21端口 )
Python 渗透测试:文件传输爆破( 21端口 )
40 2
下一篇
DataWorks