使用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/以外的页面时,服务器将尝试返回对应文件的下载。
注意:上述代码仅为实现文件上传和下载功能的简单示例,并没有考虑到安全性、可扩展性等方面的问题。在实际应用中,需要进行更多的验证和处理。
