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 将处理这个请求,并将文件保存到服务器。

相关推荐
老白干1 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
笨鸟先飞,勤能补拙8 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能9 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂9 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study9 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境10 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境10 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12310 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy123931021611 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb0011 小时前
一个项目带你入门AI应用开发01
python