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

Python中通过wsgiref.util模块实现文件上传功能

发布时间:2023-12-25 19:40:05

使用Python中的wsgiref.util模块实现文件上传功能,可以通过解析HTTP请求体中的multipart/form-data数据,获取到文件的相关信息和内容,并进行相应的处理。

下面是一个具体的例子,通过wsgiref模块实现一个简单的文件上传服务器。

首先,需要导入相关的模块和函数:

from wsgiref.util import request
import os

接下来,定义一个处理请求的函数handle_request,用于处理文件上传请求:

def handle_request(environ, start_response):
    # 解析HTTP请求体中的multipart/form-data数据
    form = request.parse_form_data(environ)

    # 判断是否有文件上传
    if 'file' in form:
        fileitem = form['file']

        # 获取文件名和文件内容
        filename = fileitem.filename
        filecontent = fileitem.file.read()

        # 保存文件到本地
        with open(filename, 'wb') as f:
            f.write(filecontent)

        # 返回上传成功的消息
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [b'File uploaded successfully.']

在主函数中,创建一个简单的HTTP服务器,并将处理请求的函数handle_request绑定到该服务器:

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    
    # 创建一个简单的HTTP服务器
    httpd = make_server('', 8000, handle_request)
    print('Serving on port 8000...')
    
    # 监听HTTP请求,并处理请求
    httpd.serve_forever()

当运行以上代码后,将在本地创建一个简单的HTTP服务器,监听8000端口。在浏览器中访问 http://localhost:8000/,将会显示“File uploaded successfully.”的文本。

可以通过在HTML中使用form的enctype属性指定multipart/form-data类型的表单,实现文件上传功能。以下为一个简单的HTML例子:

<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" value="Upload" />
    </form>
</body>
</html>

保存上述例子为index.html,并在浏览器中打开该文件,选择一个文件并点击上传按钮即可实现文件上传。

以上例子实现了一个简单的文件上传服务器,通过解析HTTP请求体中的multipart/form-data数据,获取到文件的相关信息和内容,并将文件保存到服务器本地。同时,可以根据实际需求,对上传的文件进行进一步处理和操作。