[Python http.server] 搭建http服务器用于下载/上传文件

这篇具有很好参考价值的文章主要介绍了[Python http.server] 搭建http服务器用于下载/上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动机:笔者需测试bs架构下的文件上传与下载性能,故想通过Python搭建http服务器并实现客户端与服务器之间的文件上传和下载需求

难点:这应该是很基础的东西,不过笔者之前未接触过http编程,谨在此记录下学习的过程,可能不是最优解

方法:在服务器端部署html页面,并执行监听的Python代码,在客户端操作实现文件的上传与下载

1 [服务端] 创建本地文件夹用于开启http服务

首先开启power shell,在服务端本地创建一个文件夹用于开启http服务,例如创建了一个E:\WebServer文件夹,如图所示:

[Python http.server] 搭建http服务器用于下载/上传文件

 进入power shell,输入命令:

cd E:\WebServer

输入开启http指令:

python -m http.server

出现如下情况,说明成功:

[Python http.server] 搭建http服务器用于下载/上传文件

 此时,我们便可以在服务器的浏览器地址栏输入本机ip地址+端口号来访问http页面,例如:

http://172.1.1.1:8000

 至于本机ip地址,可以从右键“网络”,点击你的网络连接的蓝字,详细信息里面的ipv4地址进行查看,如图所示:

[Python http.server] 搭建http服务器用于下载/上传文件

 此时,浏览器中的页面应该是这样:

[Python http.server] 搭建http服务器用于下载/上传文件

看见这个页面,第一步就完成了!


2 [服务端] 编写监听脚本,用于客户端上传文件

在服务器端根文件夹下创建一个Python脚本(在别的地方创建应该也行,没试过):

from http.server import BaseHTTPRequestHandler, HTTPServer
import time


# 创建自定义的请求处理类
class FileUploadHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        start_time = time.time()
        content_length = int(self.headers['Content-Length'])
        # 读取客户端发送的二进制文件数据
        file_data = self.rfile.read(content_length)

        # 在这里可以对接收到的文件数据进行处理,例如保存到磁盘
        with open('uploaded_file.bin', 'wb') as file:
            file.write(file_data)

        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'File uploaded successfully.')

        end_time = time.time()
        time_elapsed_ms = int((end_time - start_time) * 1000)
        print(f"Update in {time_elapsed_ms} ms")


# 启动服务器
def run_server():
    server_address = ('your web server', 8000)  # 可以根据需要修改端口号
    httpd = HTTPServer(server_address, FileUploadHandler)
    print('Server running on port 8000...')
    httpd.serve_forever()


# 运行服务器
run_server()

注意,在 ‘your web server’ 处输入自己的ip地址


3 [服务端] 编写html脚本,用于显示上传文件界面

<!DOCTYPE html>
<html>

<head>
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.6.0.js" type="text/javascript"></script>
    <!-- <script src="./jquery-3.6.0.js" type="text/javascript"></script> -->
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
</head>

<body>
    <form id="uploadForm" action="/upload" enctype="multipart/form-data" method="post" onsubmit="return submitFile()">
        <div><input type="file" name="file" multiple></div>
        <br>
        <div><input type="submit" value="upload"> </div>
    </form>
    <script>
        function submitFile() {
            // formData = new FormData($('#uploadForm')[0])
            files = $('#uploadForm')[0].file.files
            for (i = 0; i < files.length; i++) {
                $.ajax({
                    url: "/upload?fileName=" + encodeURIComponent(files[i].name),
                    type: "POST",
                    data: files[i],
                    success: function (data) {
                        console.info("success", data);
                    },
                    error: function (data) {
                        console.warn("fail", data);
                    },
                    processData: false,
                    contentType: "multipart/form-data",
                    // contentType: "application/octet-stream"
                });
            }
            return false;
        }
    </script>
</body>

</html>

上述代码参考了:python HTTPServer 实现文件上传下载_xiekch的博客-CSDN博客  

将上述代码写入到记事本文件,再保存成html文件,放入服务器根目录,并命名为index.html

[Python http.server] 搭建http服务器用于下载/上传文件

http页面便会更改成既定样式,即此时再次打开http页面,应该呈现:

[Python http.server] 搭建http服务器用于下载/上传文件


4 [客户端] 编写上传文件脚本

使用另一台电脑充当客户端,编写上传文件的Python脚本:

import requests
import os

# 指定服务器URL和要上传的文件路径
server_url = 'http://your web server:8000/upload'
file_path = '/your file path/file.bin'

testResponse = requests.get(server_url)
if testResponse.status_code == 200:
    print("与服务器的连接正常!")
else:
    print("无法连接到服务器!")

with open(file_path, 'rb') as file:
    file_data = file.read()

response = requests.post(server_url, files={'file': 'file'})

if response.status_code == 200:
    print("文件上传成功!")
else:
    print("文件上传失败!")

同样注意,在 ‘your web server’ 处输入自己的ip地址,在your file path写上文件路径

Windows系统下,文件路径可以使用双斜杠:

http://172.1.1.1:8000//data.bin

 MacOS系统下,目前测试可以使用如下格式:

'/users/north/desktop/data.bin'

5 [客户端] 编写下载文件脚本

同样的,使用另一个Python文件编写下载文件脚本:

import time
import requests

response = requests.get("http://your web server:8000//file.bin")
with open("data.bin", "wb") as f:
f.write(response.content)

再次,在 ‘your web server’ 处输入自己的ip地址


6 [客户端] 实现效果

上述步骤都准备充分后,运行 [服务端] 监听脚本,此时Python IDE的Terminal窗口应提示:

[Python http.server] 搭建http服务器用于下载/上传文件

同时,脚本应处于一直运行状态(当前显示停止键则为正在持续运行),以持续监听:

[Python http.server] 搭建http服务器用于下载/上传文件

 此时运行[客户端]的下载文件脚本,可将服务器中的目标文件进行下载,笔者又另行编写了一个记录下载时间的功能,出现下述结果说明下载成功,当然,也可以用类似于上传问价脚本的判断机制进行文件是否下载成功的判断

[Python http.server] 搭建http服务器用于下载/上传文件

[客户端]进入服务器的http地址,选择本地文件进行上传:

[Python http.server] 搭建http服务器用于下载/上传文件

同样的,[服务器]监听终端出现如下消息说明上传成功:

[Python http.server] 搭建http服务器用于下载/上传文件

 [服务器]根目录会出现暂存文件,后续若需要进一步对该暂存文件进行处理则可以进一步修改脚本

[Python http.server] 搭建http服务器用于下载/上传文件

230524修订:需要在运行服务端监听脚本前就在客户端进入上传文件页面,否则会产生Error,因暂不影响功能实现,目前尚未研究成因 


The End文章来源地址https://www.toymoban.com/news/detail-504673.html

到了这里,关于[Python http.server] 搭建http服务器用于下载/上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QtWebApp介绍、下载和搭建http轻量级服务器Demo

    QtWepApp是一个C++中的HTTP服务器库,其灵感来自Java Servlet。适用于Linux、Windows、Mac OS和Qt Framework支持的许多其他操作系统。   QtWebApp包含以下组件: • HTTP(S)1.0和1.1服务器 • 模板引擎 • 缓冲记录器   这些组件可以相互独立地使用。一个非常小的用法示例: 官方: http:

    2024年02月12日
    浏览(67)
  • 三分钟用Golang搭建一个HTTP文件上传下载服务器

    简单需要一个文件服务器来传递数据,只要两个功能,一个上传接口,一个下载接口。 选用go http模块实现,比nginx、ftp等更方便快捷。 上传接口\\\"/v1/file_upload/\\\" 上传接口增加简单BasicAuth鉴权 上传成功返回下载URL json格式返回 只想文件上传服务器测试接口,以下电梯直达即可

    2024年02月11日
    浏览(43)
  • Python中启动HTTP服务器的命令python -m http.server

    python -m http.server   是一个在Python中启动 HTTP服务器 的命令, 它允许你在本地计算机上快速搭建一个简单的HTTP服务器。 1. 打开终端或命令提示符窗口。 2. 导航到你要在服务器上共享的目录。例如,如果你想共享名为\\\"my_folder\\\"的目录,可以使用  cd  命令(在Windows上)或  cd

    2024年02月06日
    浏览(40)
  • VisualSVN Server下载安装和使用方法、服务器搭建、使用TortoiseSvn将项目上传到云端服务器、各种错误解决方法

    请大家多多指正,欢迎大家关注! 以A台电脑作为服务器,B台电脑从服务器上拉代码下来到B电脑本地。 截止2024.01.19为最新版本 写这篇文章主要是总是忘记如何将写好的项目推送到服务器里这个操作,其他都是捎带,写下来,再忘就看这篇文章。一写就太多了,但没有相应的

    2024年02月21日
    浏览(36)
  • python搭建HTTP服务器

    项目经常需要HTTP对接,模拟HTTP client请求可以使用postman测试,模拟HTTP server回复该如何处理?本文介绍通过python搭建HTTP服务器的过程。 先装python,然后装PyCharm。 python安装、下载说明,看这部分 https://www.runoob.com/python3/python3-install.html PyCharm安装、下载说明,看这部分 PyCharm

    2024年02月05日
    浏览(32)
  • 在Windows 环境下使用 Nginx 搭建 HTTP文件服务器 实现文件下载 全步骤(详细)

    “Nginx 是一款轻量级的 HTTP 服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的 IO 性能,时常用于服务端的 反向代理 和 负载均衡 。 它是由俄罗斯人 伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点开发的,并于2004年首次公开发布的。 Nginx 是什么,

    2024年02月03日
    浏览(52)
  • 如何用Python 快速搭建HTTP服务器

    Python具有语法简单、语句清晰的特点,而且Python的兼容性比较好,可以将其他语言制作的模块联结起来,具有强大且丰富的库,封装后可以轻松调用, 因此成为编程语言中的“网红“,甚至被称为 非计算机从业者的第一语言。 Python 在 IT 就业市场也是 最受欢迎、最热门的技术技能

    2023年04月08日
    浏览(33)
  • python3 简易 http server:实现本地与远程服务器传大文件

    在个人目录下创建新文件 httpserver.py : 文件内容为python3代码: 在需要暴露的目录下启动http服务,如 /data/codes/ 随后在个人电脑访问 http://ip:8888 即可浏览文件、上传文件:

    2024年02月08日
    浏览(40)
  • 【服务器】Python一行命令搭建HTTP服务器并外网访问 - 内网穿透

    转载自cpolar极点云文章:【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透」 Python作为热度比较高的编程语言,其语法简单且语句清晰,而且python有良好的兼容性,可以轻松的和其他编程语言((比如C/C++))建立的模块连接起来,而且python丰富强大的库,经过封装可

    2024年02月12日
    浏览(31)
  • Qt+QtWebApp开发笔记(一):QtWebApp介绍、下载和搭建基础封装http轻量级服务器Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130631547 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:没有了 下一篇:《Qt+Q

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包