如何将信息(数据)从FastAPI服务器(客户端)发送到另一个FastAPI(模型)

问题描述 投票:0回答:2

我是 RESTful API 的新手...

所以我尝试部署两个服务器(客户端和模型)。主要思想是:

  • 客户端将自己的图片上传到客户端服务器,客户端服务器(端口8000)将进行一些转换
  • 然后我希望客户端服务器向另一台服务器(也在端口 8008 处使用 FastAPI)发送帖子(带有转换后的数据)。

目前,我正在努力解决客户端服务器部分,如何向另一台服务器发送帖子?


# Define a flask app
app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

templates = Jinja2Templates(directory="./templates")

origins = ["*"]
methods = ["*"]
headers = ["*"]


app.add_middleware(
    CORSMiddleware, 
    allow_origins = origins,
    allow_credentials = True,
    allow_methods = methods,
    allow_headers = headers    
)


@app.get('/', response_class=HTMLResponse)
def root(request: Request):
        return templates.TemplateResponse("index.html", {"request": request})
    #render_template('index.html')



#here the client will upload his image to the server
#and then encrypt it in the same button
@app.post('/encrypt', status_code=200)
async def upload_img(f: UploadFile = File(...)):

        ret = {}
        logger.debug(f)
        #base_path = "uploads"
        # filename = "predict.jpg"
        f.filename = "predict.jpg"
        base_path = os.path.dirname(__file__)
        file_path = os.path.join(base_path, 'uploads',secure_filename(f.filename))
        os.makedirs(base_path, exist_ok=True)
        try:
            with open(file_path, "wb") as buffer:
                shutil.copyfileobj(f.file, buffer)
        except Exception as e:
            print("Error: {}".format(str(e)))


        image_info = {"filename": f.filename,  "image": f}

        #preprocess image
        plain_input = load_input(f)
        #create a public context and drop sk
        ctx, sk = create_ctx()
        
        #encrypt 
        enc_input = prepare_input(ctx, plain_input)
        enc_input_serialize = enc_input.serialize()

        # la tu dois faire un post au serveur
        return  sk



class inference_param(BaseModel):
    context : bytes
    enc_input : bytes


@app.post("/data") #send data to the model server
async def send_data(data : inference_param):
    return data



python post fastapi
2个回答
3
投票

由于您的端点是异步的,您可以使用异步 HTTP 库(如 aiohttphttpx)来发出请求。

如果您不希望客户端服务器的客户端等待图像上传,您还可以使用后台任务


0
投票

Hamid,您可以发布所有结果代码吗

© www.soinside.com 2019 - 2024. All rights reserved.