python 文件上传
复制# -*- coding: utf-8 -*-
from tornado.web import url
import tornado.web
from tornado import httpclient
from .base import BaseHandler
from utils.utils import create_password
from utils.decorators import jwt_async,auth_validated,role_validated
import peewee
import random
import io
import json
from datetime import datetime
import uuid
import aiofiles
import os
from .config import FILE_CHECK,FILE_SIZE
import math
# 文件上传
class UploadHandler(BaseHandler):
# @jwt_async()
async def post(self):
"""
处理POST请求的异步函数
"""
back_file = "" # 保存文件的变量
file = self.request.files['file'] # 获取上传的文件
for key in file: # 遍历上传的文件
new_file_name = ''.join(str(uuid.uuid1()).split('-')) # 生成新的文件名
file_name = key['filename'] # 获取文件名
file_size = len(key['body']) # 获取文件大小
file_content = key['body'] # 获取文件内容
check_name = file_name.split('.')[-1] # 获取文件的扩展名
print(new_file_name,file_name,file_size,file_content,check_name)
if check_name.lower() not in FILE_CHECK: # 检查文件类型是否符合规定
self.finish({"msg": "不是规定的文件类型", "errcode": 2})
if file_size > FILE_SIZE: # 检查文件大小是否超过规定
self.finish({"msg": "文件过大", "errcode": 2})
save_file_name = new_file_name + '.' + check_name # 生成保存的文件名
back_file = save_file_name # 更新保存文件的变量
async with aiofiles.open("./static/uploads/" + save_file_name, 'wb') as f: # 打开文件保存路径
await f.write(file_content) # 写入文件内容
self.finish({"msg": "ok", "errcode": 0, "file": back_file}) # 返回保存的文件名
urlpatterns = [
url('/upload/',UploadHandler),
]
var code = "b47f830d-4372-4e47-bc10-f5c65afa2617"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?