使用 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:无法从 Azure 函数 HttpTrigger 读取 Blob 文本(400 - 错误请求错误)