Python中使用http.server.HTTPServer模块实现简单的文件上传服务
发布时间:2024-01-09 20:47:31
在Python中,可以使用http.server.HTTPServer模块来实现一个简单的文件上传服务。下面是一个使用例子,详细说明了如何使用该模块来创建一个文件上传服务:
import cgi
from http.server import BaseHTTPRequestHandler, HTTPServer
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD': 'POST'}
)
# 检查是否存在上传的文件
if 'file' not in form:
self.send_response(400)
self.end_headers()
self.wfile.write(b'No file uploaded.')
return
file_item = form['file']
# 检查文件是否被成功上传
if file_item.filename:
with open(file_item.filename, 'wb') as file:
file.write(file_item.file.read())
self.send_response(200)
self.end_headers()
self.wfile.write(b'File uploaded successfully.')
else:
self.send_response(500)
self.end_headers()
self.wfile.write(b'File upload failed.')
def run(server_class=HTTPServer, handler_class=RequestHandler, port=8000):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f'Starting file upload server on port {port}...')
httpd.serve_forever()
if __name__ == '__main__':
run()
上述代码中,我们定义了一个自定义的RequestHandler类,继承自http.server.BaseHTTPRequestHandler。在该类中,我们重写了do_POST方法来处理客户端的POST请求。
在do_POST方法中,首先使用cgi.FieldStorage类来解析POST请求的内容,该类可以解析包含上传文件的POST请求。然后我们检查是否存在上传的文件,如果没有文件,则返回错误响应码400。如果存在上传的文件,我们将其写入到服务器本地的文件中,并返回成功响应码200。
最后,在main函数中,我们调用run函数来启动HTTP服务器。默认情况下,服务器将监听8000端口,你可以通过调用run函数时传入port参数来修改监听的端口。
要运行该文件上传服务,只需在终端中运行该脚本,并访问http://localhost:8000/。在页面上选择要上传的文件,然后点击上传按钮即可。如果文件上传成功,会显示"File uploaded successfully.",否则将显示"File upload failed."。
这只是一个简单的文件上传服务的示例,你可以根据自己的需求,对代码进行修改和扩展。同时,还可以使用其他第三方库(如Flask、Django等)来实现更加复杂和强大的文件上传服务。
