欢迎访问宙启技术站
智能推送

使用BaseHTTPServer实现文件上传和下载功能

发布时间:2023-12-25 10:32:35

BaseHTTPServer是Python中的一个内置模块,用于实现基本的HTTP服务器功能。它提供了一种简单的方式来处理HTTP请求和响应,并可以用于实现文件上传和下载功能。

下面是一个使用BaseHTTPServer实现文件上传和下载功能的示例代码:

import os
import BaseHTTPServer

class FileServer(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()

            # 返回一个简单的HTML表单,用于上传文件
            html = '''
            <html>
            <head><title>文件上传</title></head>
            <body>
            <form enctype="multipart/form-data" method="post">
            <input type="file" name="file">
            <input type="submit" value="上传">
            </form>
            </body>
            </html>
            '''
            self.wfile.write(html)
        else:
            # 处理文件下载
            filepath = os.path.join('.', self.path[1:])
            if os.path.isfile(filepath):
                self.send_response(200)
                self.send_header('Content-type', 'application/octet-stream')
                self.send_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(filepath))
                self.end_headers()
                with open(filepath, 'rb') as f:
                    self.wfile.write(f.read())
            else:
                self.send_response(404)
                self.end_headers()
                self.wfile.write('File not found.')

    def do_POST(self):
        self.send_response(200)
        self.end_headers()
        
        # 读取上传的文件数据
        length = int(self.headers['Content-Length'])
        data = self.rfile.read(length)
        
        # 获取文件名
        filename = self.headers['Content-Disposition'].split('filename=')[1].replace('"', '').strip()

        # 写入文件
        with open(filename, 'wb') as f:
            f.write(data)

        self.wfile.write('File uploaded successfully.')

# 创建HTTP服务器,并监听本地8080端口
httpd = BaseHTTPServer.HTTPServer(('', 8080), FileServer)

print('服务器已启动,通过 http://localhost:8080/ 访问.')
httpd.serve_forever()

使用以上代码,你可以在本地搭建一个简单的HTTP服务器,并实现文件上传和下载功能。当你启动服务器后,通过访问http://localhost:8080/,你将看到一个简单的文件上传页面,你可以选择一个文件并点击"上传"按钮来上传文件。上传的文件将保存在服务器的当前目录中。当你访问http://localhost:8080/以外的页面时,服务器将尝试返回对应文件的下载。

注意:上述代码仅为实现文件上传和下载功能的简单示例,并没有考虑到安全性、可扩展性等方面的问题。在实际应用中,需要进行更多的验证和处理。