文件对象
前面我们已经了解了 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
了,这样我们就可以拿到其名称,类型等数据。
信息展示页面
两种类型的信息展示页面,我们使用的同一个。
网络异常,图片无法展示
|
我们看到,名称已经展示出来了。
感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!