FastApi-13-文件上传-1

简介: FastApi-13-文件上传-1

文件对象


前面我们已经了解了 Form 表单,其多用于数据提交。今天我们一起来看下文件的上传,同样也需要使用到 Form 表单。


文件上传我们需要借助 FastApi 为我们提供的 File 对象和 UploadFile 对象。File 对象为 bytes 类型,我们可以理解为文件本体。UploadFile 对象为文件的元数据。


上传页面&试图函数


@app.get('/f/')
async def ff(request:Request):
    return templates.TemplateResponse('f1.html',{"request":request})
复制代码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>UP-F</title>
</head>
<body>
    <form action="/upfile/" method="post" enctype="multipart/form-data">
        <input type="file" name="file_list" multiple>
        <input type="submit" value="点击显示文件大小">
    </form>
    <form action="/upfile1/" method="POST" enctype="multipart/form-data">
        <input type="file" name='upload_list'>
        <input type="submit" value="点击显示文件名称">
    </form>
</body>
</html>
复制代码


网络异常,图片无法展示
|


上传页面主要是一个 Form 表单,其中有一个类型为 fileinput 标签,用于选择文件,submit 类型的 input 标签用于提交文件。


File 类型文件上传


from fastapi import File,UploadFile
from typing import List
@app.post('/upfile/')
async def up_f(request:Request,file_list:List[bytes]=File(...)):
    return templates.TemplateResponse('f.html',{"request":request,"file_sizes":[len(dd)/1024 for dd in file_list]})
复制代码


File 类型的文件,因为其为文件本身,所以我们可以拿到其大小,但是它没有文件名称等属性。


信息展示页面


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File</title>
</head>
<body>
    <h1>文件大小:{{ file_sizes }} KB</h1>
    <h1>文件名字:{{ file_names }}</h1>
</body>
</html>
复制代码


我们在第一个文件上传框中选择文件,点击显示文件大小


网络异常,图片无法展示
|


因为我们的两种类型的上传写在了同一个页面,而且我们没有选择第二个文件,所以文件大小的值是没有的。


UploadFile 类型文件上传


from fastapi import File,UploadFile
from typing import List
@app.post('/upfile1/')
async def up_f1(request:Request,upload_list:List[UploadFile]=File(...)):
    return templates.TemplateResponse('f.html',{"request":request,"file_names":[dd.filename for dd in upload_list]})
复制代码


可以看到,up_f1 的入参类型已经是 UploadFile 了,这样我们就可以拿到其名称,类型等数据。


信息展示页面


两种类型的信息展示页面,我们使用的同一个。


网络异常,图片无法展示
|


我们看到,名称已经展示出来了。


感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!

相关文章
|
前端开发
FastApi-15-文件上传-3
FastApi-15-文件上传-3
273 0
|
7月前
|
人工智能 移动开发 小程序
uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)
uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)
338 2
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
|
NoSQL Redis 数据库
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程