python fastapi 多文件上传,客户端及服务端

服务端:

# !/usr/bin/python
# -*- coding: utf-8 -*-
import json
import time
from typing import List, Dict, Set

from fastapi import FastAPI, Request, status, Form, Body, Query,File,UploadFile
from fastapi import Header
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from pydantic import conint, validator
from multiprocessing import Process, Value
import uvicorn

app = FastAPI()


@app.post("/file_upload")
async def file_upload(file: UploadFile = File(...)):
    start = time.time()
    try:
        res = await file.read()
        with open(file.filename, "wb") as f:
            f.write(res)
        return {"message": "success", 'time': time.time() - start, 'filename': file.filename}
    except Exception as e:
        return {"message": str(e), 'time': time.time() - start, 'filename': file.filename}


@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
    try:
        for file in files:
            res = await file.read()
            with open(file.filename, "wb") as f:
                f.write(res)
        return {"message": "success", "filenames": [file.filename for file in files]}
    except Exception as e:
        return {"message": str(e), "filenames": [file.filename for file in files]}


def http_worker(alive,host,port):

    uvicorn.run(app='httpd_test:app',
            host=host,
            port=port,
            workers=1,
            reload=False,
            debug=False,
            access_log=False,
            log_level='error')


alive = Value('b', False)

if __name__ == "__main__":
    alive.value = True
    p = Process(target=http_worker, args=(alive, '0.0.0.0', 9081), daemon=True)
    p.start()


    time.sleep(2)
    print("start")
    while True:
        str1 = input("请输入q退出:")
        if str1 == "q":
            break

    p.join(0.5)
    alive.value = False
    print("exit")

客户端:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

url = "http://127.0.0.1:9081/uploadfiles"
path = "E:\\test\\123.jpeg"
path1 = "E:\\test\\222.png"
files = [
        ("files", open(path, "rb")),
        ("files", open(path1, "rb"))
    ]

files1 = {'files': open(path, 'rb')}
r = requests.post(url, files=files)
print(r.url)
print(r.text)

其中多个文件要用list的写法:

files = [
        ("files", open(path, "rb")),
        ("files", open(path1, "rb"))
    ]

你可能感兴趣的:(python fastapi 多文件上传,客户端及服务端)