FastApi-14-文件上传-2

简介: FastApi-14-文件上传-2

UploadFile


接上篇,实际开发中,我们需要在上传文件的时候拿到文件本体以及文件的元数据信息。


但是实际操作中,你会发现,File 对象是可以使用 len 函数获取大小的,但是 File 对象没有名称,类型等属性。而 UploadFile 对象虽然有名称,类型等 属性,但是其没有直接获取文件大小的属性。


通过阅读源码,我们会发现,UploadFile 是有一个 file 属性的,这样我们就可以拿到 file 对象,但是这个 file 对象是 SpooledTemporaryFile 类型的,我们可以通过 read 方法拿到 file 文件对象内容,再通过 len 函数即可得出其大小。


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


视图函数代码


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],
            "file_sizes":[len(ds.read())/1024 for ds in [dd.file for dd in upload_list]],
            "file_types":[dd.content_type for dd in upload_list]
            })
复制代码


信息展示页面


<!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>
    <h1>文件类型:{{ file_types }}</h1>
</body>
</html>
复制代码


选择多个文件,点击显示文件信息:


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


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


可以看到,我们的需求已经实现。


Tip


有的朋友可能会发现,你的文件上传框无法选择多个文件,这是怎么回事呢? 答案是:你的 input 标签缺少了 multiple 属性。


multiple 属性规定输入字段可选择多个值。如果使用该属性,则字段可接受多个值。


<form action="/upfile1/" method="POST" enctype="multipart/form-data">
        <input type="file" name='upload_list' multiple>
        <input type="submit" value="点击显示文件信息">
    </form>
复制代码


如上,即可实现多个文件的上传。


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

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