tornado上传文件

简介

在 Tornado web 框架中,上传图片通常涉及创建一个表单,让用户选择文件并上传。Tornado 通过其 RequestHandler 类来处理这些请求,你可以重写 post 方法来接收上传的文件。

后端

python 复制代码
import os
import tornado.ioloop
import tornado.web
import tornado.httpserver

class UploadHandler(tornado.web.RequestHandler):
    def post(self):
        # 获取上传的文件
        file_info = self.request.files['file'][0]
        
        # 获取文件名和文件内容
        file_name = file_info['filename']
        file_content = file_info['body']
        
        # 定义保存文件的路径
        upload_path = os.path.join('uploads', file_name)
        
        # 保存文件
        with open(upload_path, 'wb') as f:
            f.write(file_content)
        
        # 返回成功信息
        self.write({'status': 'success', 'filename': file_name})

def make_app():
    return tornado.web.Application([
        (r"/upload", UploadHandler),
    ])

if __name__ == "__main__":
    # 确保上传目录存在
    if not os.path.exists('uploads'):
        os.makedirs('uploads')
    
    app = make_app()
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在上面的代码中,我们定义了一个 UploadHandler 类,它继承自 tornado.web.RequestHandler。在 post 方法中,我们获取上传的文件信息,并将其保存到服务器的文件系统中。上传的文件保存在 uploads 目录下,文件名保持不变。

请注意,此示例未包含任何形式的输入验证或错误处理。在实际应用中,你应该检查上传的文件类型(确保是图片),文件大小(防止过大的文件上传),以及可能的安全问题(如文件覆盖和目录遍历攻击)。

前端

此外,你还需要在前端创建一个表单来上传文件。一个简单的 HTML 表单可能如下所示:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Upload Image</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</body>
</html>

用户选择文件并点击上传按钮后,浏览器会向 /upload 路径发送一个 POST 请求,包含用户选择的文件。Tornado 服务器上的 UploadHandler 将处理这个请求,并将文件保存到服务器。

相关推荐
happylifetree13 分钟前
Python68:核心语法-函数进阶-匿名函数(lambda表达式)
python
专注仿真17 分钟前
从「能跑通」到「能交付」:一套可直接落地的电商用户行为分析平台(Python + SQLite/MySQL + Streamlit 全栈源码与部署文档)
python·mysql·sqlite
小小张说故事19 分钟前
Python 的 for 到底怎么跑起来的?拆开迭代协议:GET_ITER 之后 FOR_ITER 在循环什么
python
凯瑟琳.奥古斯特1 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
蒸鱼Yuzheng2 小时前
自动化长任务治理:租约、心跳、孤儿进程与安全回收
自动化测试·python·任务调度·可靠性·分布式系统
2601_962885722 小时前
从 baostock 迁移到 AlphaFeed:接口对照与代码迁移指南
python
AI情绪识别开源3 小时前
检信ALLEMOTION 标定治理与信号质量闸门 · 老年无感认知评估分析器
python
七夜zippoe3 小时前
启元 Q1 腿部运动学逆解:Python 算站立下蹲关节角
开发语言·python·ai·机器人·腿部运动学
第404号工位3 小时前
插上充电宝真能偷光相册?我拆解了一台改装充电宝,实测“恶意充电”的真实攻击链
linux·python·架构
技术卷3 小时前
Windows 下自定义 MCP 踩坑:stdin 默认继承导致 CPython 启动阻塞
python·mcp·zcode