文件对象
前面我们已经了解了 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
表单,其中有一个类型为 file
的 input
标签,用于选择文件,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
了,这样我们就可以拿到其名称,类型等数据。
信息展示页面
两种类型的信息展示页面,我们使用的同一个。
我们看到,名称已经展示出来了。
感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!
评论