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"

posted @   乐乐乐乐乐乐樂  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
jQuery火箭图标返回顶部代码
点击右上角即可分享
微信分享提示