当前位置: 首页 > news >正文

FastHTML快速入门:单文件上传 ,多文件上传

文件上传在Web开发中是一个常见的任务。以下示例展示了如何上传文件到托管服务器,并向用户展示上传文件的信息。需要注意的是,文件上传在生产环境中可能存在安全隐患,因此请务必了解相关风险。

单文件上传

以下是一个单文件上传的示例代码:

from fasthtml.common import *
from pathlib import Path
app, rt = fast_app()
upload_dir = Path("filez")
upload_dir.mkdir(exist_ok=True)
@rt('/')
def get():return Titled("文件上传演示",Article(Form(hx_post=upload, hx_target="#result-one")(Input(type="file", name="file"),Button("上传", type="submit", cls='secondary'),),Div(id="result-one")))
def FileMetaDataCard(file):return Article(Header(H3(file.filename)),Ul(Li('大小: ', file.size),            Li('内容类型: ', file.content_type),Li('头部信息: ', file.headers),))    
@rt
async def upload(file: UploadFile):card = FileMetaDataCard(file)filebuffer = await file.read()(upload_dir / file.filename).write_bytes(filebuffer)return card
serve()

第13行:使用Form组件渲染的每个表单默认为enctype="multipart/form-data"
第14行:不要忘记将Input组件的类型设置为file
第32行:上传视图应接收一个Starlette UploadFile类型的参数。您可以添加其他表单变量。
第33行:我们可以访问卡片元数据(文件名、大小、内容类型、头部信息),这是一个快速且安全的过程。我们将这些信息设置到卡片变量中。
第34行:为了访问文件中的内容,我们使用await方法来读取()。由于文件可能很大或包含错误数据,这是一个与访问元数据分开的步骤。
第35行:此步骤展示了如何使用Python内置的pathlib.Path库将文件写入磁盘。

多文件上传

以下是一个多文件上传的示例代码:

from fasthtml.common import *
from pathlib import Path
app, rt = fast_app()
upload_dir = Path("filez")
upload_dir.mkdir(exist_ok=True)
@rt('/')
def get():return Titled("多文件上传演示",Article(Form(hx_post=upload_many, hx_target="#result-many")(Input(type="file", name="files", multiple=True),Button("上传", type="submit", cls='secondary'),),Div(id="result-many")))
def FileMetaDataCard(file):return Article(Header(H3(file.filename)),Ul(Li('大小: ', file.size),            Li('内容类型: ', file.content_type),Li('头部信息: ', file.headers),))    
@rt
async def upload_many(files: list[UploadFile]):cards = []for file in files:cards.append(FileMetaDataCard(file))filebuffer = await file.read()(upload_dir / file.filename).write_bytes(filebuffer)return cards
serve()

第13行:使用Form组件渲染的每个表单默认为enctype="multipart/form-data"
第14行:不要忘记将Input组件的类型设置为file,并将multiple属性设置为True
第32行:上传视图应接收一个包含Starlette UploadFile类型的list。您可以添加其他表单变量。
第34行:遍历文件。
第35行:我们可以访问卡片元数据(文件名、大小、内容类型、头部信息),这是一个快速且安全的过程。我们将这些信息添加到卡片变量中。
第36行:为了访问文件中的内容,我们使用await方法来读取()。由于文件可能很大或包含错误数据,这是一个与访问元数据分开的步骤。
第37行:此步骤展示了如何使用Python内置的pathlib.Path库将文件写入磁盘。
请注意,文件上传在生产环境中可能存在安全隐患。建议您阅读OWASP文件上传备忘录以了解更多安全知识。


http://www.mrgr.cn/news/75442.html

相关文章:

  • RabbitMQ集群搭建
  • Tofu AI视频处理模块视频输入配置方法
  • 代码随想录训练营Day24 | 134. 加油站 - 135. 分发糖果 - 860.柠檬水找零 - 406.根据身高重建队列
  • 动手学深度学习69 BERT预训练
  • openresty入门教程:rewrite_by_lua_block
  • 自动化爬虫DrissionPage
  • 使用python编写工具:快速生成chrome插件相关文件结构
  • JAVA学习-练习试用Java实现“网络编程”
  • 【大数据技术基础 | 实验十一】Hive实验:新建Hive表
  • 性能调优专题(9)之从JDK源码级别解析JVM类加载机制
  • 【汇编语言】包含多个段的程序(一)—— 在代码段中使用数据和栈
  • 无需魔法的AI绘图神器,不能错过的宝藏软件!
  • Android 无签名系统 debug 版本APK push到设备引起的开机异常问题分析(zygote进程)
  • 双十二有什么好物推荐?盘点2024年双十二最值得入手的好物!
  • P3372 【模板】线段树 1
  • 大模型重塑软件研发,从辅助编程到多 Agent 协同还有多远?
  • WSADATA 关键字详细介绍
  • 用EXCEL一列数据拼接SQL的where条件in语句
  • 使用Python实现智能食品储存管理的深度学习模型
  • 快速上手 Hugging Face Transformers:完整模型微调训练步骤全攻略
  • 历久弥新的c-Met:靶向疗法研究进展
  • 【route】route add命令详解
  • 去中心化应用(DApps)在Web3生态中的发展趋势
  • 大模型时代,呼叫中心的呼入机器人系统如何建设?
  • 【Visual Studio】使用VS调试(Debug)
  • APEX高性能减速机MG/MGH系列 高负载应用下的精准动力传输