文件上传

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)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容