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)
网友评论