使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件

Elaborate and store inside an azure blob multiple files from a form-data request by using azure functions

我正在开发一个 azure 函数,它通过表单数据格式在输入中接收多个不同格式的文件(例如 xlsx、csv、txt、pdf、png)。这个想法是开发一个函数,可以获取文件并将它们一个一个地存储在一个 blob 中。目前,我的代码如下:

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

    filename, contents = False, False
    try:
        files = req.files.values()
        for file in files: 
            filename = str(file.filename)
            logging.info(type(file.stream.read()))
            contents = file.stream.read().decode('utf-8')
     except Exception as ex:
        logging.error(str(type(ex)) + ': ' + str(ex))
        return func.HttpResponse(body=str(ex), status_code=400)

然后我在 blob 中写入内容变量,但 blob 中的文件大小为 0,如果我尝试下载文件,文件为空。我如何管理此操作以将不同格式的文件存储在 blob 中?非常感谢您的支持!

下面是上传多个不同格式文件的代码:

from  azure.storage.blob  import  BlobServiceClient, BlobClient, ContainerClient,PublicAccess
import  os

def  UploadFiles():
CONNECTION_STRING="ENTER_STORAGE_CONNECTION_STRING"
Container_name="uploadcontainer"
service_client=BlobServiceClient.from_connection_string(CONNECTION_STRING)
container_client = service_client.get_container_client(Container_name)
ReplacePath = "C:\"
local_path = "C:\Testupload"  #the local folder

for  r,d,f  in  os.walk(local_path):
    if  f:
    for  file  in  f:
    AzurePath = os.path.join(r,file).replace(ReplacePath,"")
    LocalPath = os.path.join(r,file)
    blob_client = container_client.get_blob_client(AzurePath)
    with  open(LocalPath,'rb') as  data:
    blob_client.upload_blob(data)
    
if  __name__ == '__main__':
    UploadFiles()
    print("Files Copied")

根据你的问题,我无法了解你的函数是如何被触发的,以及你上传文件的位置。 因此,根据您的逻辑,您可以使用上面的代码来上传所有类型的文件。

目前以上代码可用于上传本地文件夹中的所有文件。以下是复制的屏幕截图: