如何在 Azure 函数中接收多部分表单数据?

2022-01-17 00:00:00 python azure-functions

问题描述

我想在 Azure Function 中接收包含图像和文本的多部分数据.

我可以在 C# 和节点中看到很多示例

I want to receive multipart data containing images and texts in Azure Function.

I could see a lot of examples in C# and nodeNode link but Could not find anything in python.

Could not find anything in official docs as well Docs

解决方案

I have tried the below code and it works for me:

import logging
import json
import io
from PIL import Image
from azure.storage.blob import BlobServiceClient,BlobClient
import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.form['name']
    interests =json.dumps(req.form["interests"], indent=2)
    imagefile = req.files["file"]
    filename = imagefile.filename
    filestream = imagefile.stream
    filestream.seek(0)

    blob = BlobClient.from_connection_string(conn_str= "<your connection string>", container_name="<container name>", blob_name="<blob name>")

    blob.upload_blob(filestream.read(), blob_type="BlockBlob")

    if name:
        return func.HttpResponse(f"Hello, {name}. Created profile with your interests : {interests}. Uploaded your profile image file :{filename} to the blob. This function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

However, you can also use PIL in this case to get the bytes from the image . Then the code looks like :


import logging
import json
import io
from PIL import Image
from azure.storage.blob import BlobServiceClient,BlobClient
import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.form['name']
    interests =json.dumps(req.form["interests"], indent=2)
    filename = req.files["file"].filename
    image = Image.open(req.files["file"])
    imgByteIO = io.BytesIO()
    image.save(imgByteIO, format=image.format)
    imgByteArr = imgByteIO.getvalue()

    blob = BlobClient.from_connection_string(conn_str= "<your connection string>", container_name="<container name>", blob_name="<blob name>")
    blob.upload_blob(imgByteArr)

    if name:
        return func.HttpResponse(f"Hello, {name}. Created profile with your interests : {interests}. Uploaded your profile image file :{filename} to the blob. This function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )


Here is the postman request:

相关文章