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

Posted

技术标签:

【中文标题】使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件【英文标题】:Elaborate and store inside an azure blob multiple files from a form-data request by using azure functions 【发布时间】:2021-12-22 12:55:56 【问题描述】:

我正在开发一个 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 中?非常感谢您的支持!

【问题讨论】:

【参考方案1】:

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

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")

根据您的问题,我无法了解您的功能是如何触发的,以及您在哪里上传文件。 因此,根据您的逻辑,您可以使用上面的代码上传所有类型的文件。

目前上述代码可用于上传本地文件夹中的所有文件。下面是repro的截图:

【讨论】:

以上是关于使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件的主要内容,如果未能解决你的问题,请参考以下文章

Azure CDN 中的详细访问日志

Azure:无法从 Azure 函数 HttpTrigger 读取 Blob 文本(400 - 错误请求错误)

使用java中的azure函数将文件从浏览器上传到azure blob存储

PHP中 post 与get的区别 详细说明

使用 Azure APIM 策略处理表单数据

处理servlet中的多个请求,并为每个请求提供正确的响应