返回顶部
首页 > 资讯 > 后端开发 > Python >Python利用fastapi实现上传文件
  • 967
分享到

Python利用fastapi实现上传文件

2024-04-02 19:04:59 967人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录使用File实现文件上传使用UploadFile实现文件上传UploadFile的属性设置上传文件是可选的上传多个文件知识点补充使用File实现文件上传 使用FORM表单上传文件

使用File实现文件上传

使用FORM表单上传文件,fastapi使用File获取上传的文件。

指定了参数类型是bytes:file: bytes = File(),此时会将文件内容全部读取到内存,比较适合小文件。

使用File需要提前安装 python-multipart

from fastapi import FastAPI, File
 ​
app = FastAPI()
 ​
@app.post("/files/")
async def create_file(file: bytes = File()):
   return {"file_size": len(file)}

只要在路径操作函数中声明了变量的类型是bytes且使用了File,则fastapi会将上传文件的内容全部去读到参数中。

使用UploadFile实现文件上传

对于大文件,不适合将文件内容全部读取到内存中,此时使用UploadFile

from fastapi import FastAPI, UploadFile
 ​
app = FastAPI()
 ​
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
     return {"filename": file.filename}

bytes相比,使用UploadFile有如下好处:

  • 不需要在使用File()作为路径操作函数中参数的默认值
  • 不会把文件内容全部加载到内存中,而是批量读取一定量的数据,边读边存硬盘。
  • 可以获取文件的元数据。
  • 该类型的变量可以像文件变量一样操作。

UploadFile的属性

  • filename:类型是str,用来获取文件的名字,比如:myimage.png
  • content_type: 类型是str, 用来获取文件的类型,比如:image/png
  • file: 类文件对象,是一个标准的Python文件对象

除了这四个基础属性外,UploadFile还有三个async方法:

  • write, 将str或者bytes写到文件中
  • read: 读文件
  • seek: 移动光标
  • close: 关闭文件
 # 获取文件内容
 contents = await myfile.read()

设置上传文件是可选的

设置默认值是None即可

 from typing import UNIOn
 ​
 from fastapi import FastAPI, File, UploadFile
 ​
 app = FastAPI()
 ​
 ​
 @app.post("/files/")
 async def create_file(file: Union[bytes, None] = File(default=None)):
     if not file:
         return {"message": "No file sent"}
     else:
         return {"file_size": len(file)}
 ​
 ​
 @app.post("/uploadfile/")
 async def create_upload_file(file: Union[UploadFile, None] = None):
     if not file:
         return {"message": "No upload file sent"}
     else:
         return {"filename": file.filename}

上传多个文件

参数的参数的类型是列表:列表元素是bytes或者UploadFile

 from typing import List
 ​
 from fastapi import FastAPI, File, UploadFile
 ​
 app = FastAPI()
 ​
 ​
 @app.post("/files/")
 async def create_files(files: List[bytes] = File()):
     return {"file_sizes": [len(file) for file in files]}
 ​
 ​
 @app.post("/uploadfiles/")
 async def create_upload_files(files: List[UploadFile]):
     return {"filenames": [file.filename for file in files]}

知识点补充

1.FastAPI简介

FastAPI是什么

FastAPI是一个现代的,快速(高性能)python WEB框架。基于标准的python类型提示,使用python3.6+构建API的Web框架。

FastAPI的主要特点如下:

  • 快速:非常高的性能,与nodejsGo相当(这个要感谢Starlette和Pydantic),是最快的Python框架之一。
  • 快速编码:将开发速度提高约200%到300%。
  • 更少的bug:减少大约40%的开发人员人为引起的错误。
  • 直观:强大的编辑器支持,调试时间更短。
  • 简单:易于使用和学习。减少阅读文档的时间。
  • 代码简洁:尽量减少代码重复。每个参数可以声明多个功能,减少程序的bug。
  • 健壮:生产代码会自动生成交互式文档。
  • 基于标准:基于并完全兼容API的开放标准:OpenAPI和JSON模式。

FastAPI 站在巨人的肩膀上:

  • Starlette 用于构建 Web 部件。
  • Pydantic 用于数据部分。

环境准备

安装fastapi

pip install fastapi

对于生产环境,还需要一个ASGI服务器,如Uvicorn或Hypercorn

pip install "uvicorn[standard]"

入门示例程序

新建一个main.py,编写如下程序:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}

运行程序:

uvicorn main:app --reload
INFO: Uvicorn running on Http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.

到此这篇关于Python利用fastapi实现上传文件的文章就介绍到这了,更多相关Python fastapi上传文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python利用fastapi实现上传文件

本文链接: https://lsjlt.com/news/118881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python利用fastapi实现上传文件
    目录使用File实现文件上传使用UploadFile实现文件上传UploadFile的属性设置上传文件是可选的上传多个文件知识点补充使用File实现文件上传 使用Form表单上传文件...
    99+
    2024-04-02
  • 利用java如何实现上传ftp文件
    今天就跟大家聊聊有关利用java如何实现上传ftp文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。准备条件:java实现ftp上传用到了commons-net-3.3.jar包首先...
    99+
    2023-05-31
    java ftp上传 ava
  • 如何利用文件函数实现PHP文件上传
    今天就跟大家聊聊有关如何利用文件函数实现PHP文件上传,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如果你是一个电脑爱好者,不知道PHP的话你就太落伍了,如果想知道PHP的相关知识,...
    99+
    2023-06-17
  • Python+django实现文件上传
    1、文件上传(input标签) (1)html代码(form表单用post方法提交) <input class="btn btn-primary col-md-1" style="margin:...
    99+
    2022-06-04
    文件上传 Python django
  • 利用PHP文件上传函数实现文件上传和处理功能的技巧
    利用PHP文件上传函数实现文件上传和处理功能的技巧随着互联网的快速发展,文件上传和处理功能在网站开发中变得越来越重要。PHP作为一种常用的服务器端脚本语言,拥有丰富的文件处理函数,可以轻松实现文件上传和处理的功能。本文将为您介绍一些利用PH...
    99+
    2023-11-20
    文件上传 处理 关键词:PHP PHP 文件上传
  • 怎么利用HTML5实现不刷新文件上传
    本篇内容主要讲解“怎么利用HTML5实现不刷新文件上传”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用HTML5实现不刷新文件上传”吧!之前朋友说的不刷新...
    99+
    2024-04-02
  • Spring boot实现文件上传实例(多文件上传)
    文件上传主要分以下几个步骤:(1)新建maven java project;(2)在pom.xml加入相应依赖;(3)新建一个表单页面(这里使用thymleaf);(4)编写controller;(5)测试;(6)对上传的文件做一些限制;(...
    99+
    2023-05-31
    spring boot 文件上传
  • 利用Vue3+Element-plus实现大文件分片上传组件
    目录一、背景二、技术栈三、核心代码实现四、总结一、背景 实际项目中遇到需要上传几十个G的3d模型文件,传统上传就不适用了。 结合element提供的上传组件自己封装了文件分片上传的组...
    99+
    2023-01-28
    elementui分片上传 vue element ui教程 element ui 上传文件组件
  • python+django快速实现文件上传
    对于web开来说,用户登陆、注册、文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说就没办法一步一步的操作练习;对于web应用...
    99+
    2022-06-04
    文件上传 快速 python
  • Python怎么实现上传Minio文件
    本篇内容介绍了“Python怎么实现上传Minio文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!环境依赖安装minio以及oss2依赖p...
    99+
    2023-06-25
  • python利用socket实现udp文件传输功能
    本文实例为大家分享了UDP实现文件传输的具体代码,供大家参考,具体内容如下 tcp进行文件传输看这里–python实现TCP文件接发 这里实现的接收方一直接收,发送方每次发送一个文件...
    99+
    2024-04-02
  • 用Python上传文件
    Python正在吞噬这个世界!您会发现许多热情的Python程序员和同样多的批评者,但不可否认的是,Python在当今软件开发中是一个强大的、相关的、不断增长的力量。 Python只是一种语言,语言不能解决业务问题,如工作流、体系结构和物流...
    99+
    2023-01-31
    上传文件 Python
  • vue 中怎么利用webuploader 实现文件上传功能
    今天就跟大家聊聊有关vue 中怎么利用webuploader 实现文件上传功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、封装组件引入百度提供...
    99+
    2024-04-02
  • 怎么利用HTML5实现图片文件异步上传
    本篇内容介绍了“怎么利用HTML5实现图片文件异步上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 如何利用HTML5实现图片文件异步上传
    小编给大家分享一下如何利用HTML5实现图片文件异步上传,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 1.文件未选择 2.文...
    99+
    2024-04-02
  • Nodejs中怎么利用express和multer实现文件上传
    这期内容当中小编将会给大家带来有关Nodejs中怎么利用express和multer实现文件上传,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。非常简单,一行命令。npm&...
    99+
    2024-04-02
  • 利用hadoop怎么实现一个文件上传功能
    本篇文章给大家分享的是有关利用hadoop怎么实现一个文件上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。hdfs上的文件是手动执行命令从本地linux上传至hdfs的。...
    99+
    2023-05-31
    hadoop
  • 利用servlet怎么实现一个文件上传功能
    本篇文章为大家展示了利用servlet怎么实现一个文件上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.servlet上传文件  servlet上传文件就是将客户端的文件上传到服务器端。  ...
    99+
    2023-05-31
    servlet 一个文件
  • 利用Struts怎么实现一个文件上传功能
    这期内容当中小编将会给大家带来有关利用Struts怎么实现一个文件上传功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.在jsp文件中进行定义<form action="/Struts...
    99+
    2023-05-31
    struts st
  • 利用javaweb如何实现一个文件上传功能
    利用javaweb如何实现一个文件上传功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体内容如下文件上传示例注意:jsp页面编码为"UTF-8"文件...
    99+
    2023-05-31
    javaweb 文件上传 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作