from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn
import fastapi_cdn_host
app = FastAPI()
fastapi_cdn_host.patch_docs(app)
# 客户端 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定的路径
# 服务器 接收的资源程序
# 服务器接收资源代码
# 单小文件上传
# 文件上传,文件会放在请求体里面,但是请求头的content-type是multipart/form-data
# file: bytes = File():适合小文件上传
@app.post("/files/")
# 文件时字节流类型,是fastapi里面的File类型
async def create_file(file: bytes = File()):
print("file:", file)
return {"file_size": len(file)}
# 多文件上传
@app.post("/multiFiles/")
async def create_files(files: List[bytes] = File()):
for file in files:
print(len(file))
return {"file_sizes": [len(file) for file in files]}
# file: UploadFile:适合大文件上传,比较常用
@app.post("/uploadFile/")
#直接对应UploadFile类型数据
async def create_upload_file(file: UploadFile):
#打印文件名称
print('file',file.filename)
#将上传的文件保存到服务本地
with open(f"{file.filename}", 'wb') as f:
#一次读取1024字节,循环读取写入
for chunk in iter(lambda: file.file.read(1024), b''):
f.write(chunk)
return {"filename": file.filename}
# 上传多个文件
@app.post("/multiUploadFiles/")
async def create_upload_files(files: List[UploadFile]):
for file in files:
print(file.filename)
# 将上传的文件保存到服务本地
path = os.path.join('images', f'{file.filename}')
with open(path, 'wb') as f:
# 一次读取1024字节,循环读取写入
for chunk in iter(lambda: file.file.read(1024), b''):
f.write(chunk)
return {"filenames": [file.filename for file in files]}
if __name__ == '__main__':
#注意,run的第一个参数 必须是文件名:应用程序名
uvicorn.run("file1:app", port=8080, reload=True)
文件上传
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 简介 看了不少的教程,在系统整合搭建的过程中一般写到文件上传这一节时,基本上实现一个文件上传功能就不再继续拓展,而...
- SpringCloud(第 023 篇)简单文件上传微服务采取curl或者页面点击实现文件上传 一、大致介绍 二、...