我在用Python和BlobTrigger读取内容/数据时遇到了问题。我使用本地环境并遵循文档(https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=python)。当我将文件上传到本地blob仿真器时,该函数正在侦听并成功触发。我还可以在变量中获取filepath/filename,但不能读取上传文件的内容。
当我尝试获取内容时,它总是显示一个空字符串或数组。
这是我的functions.json文件:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myblob",
"type": "blobTrigger",
"direction": "in",
"path": "log/SystemLog/{name}",
"connection": ""
}
]
}这是我的init.py文件:导入日志导入azure.functions作为func
def main(myblob: func.InputStream):
print(myblob.name)
print(myblob.length)
print(myblob.readlines())这就是在控制台中打印的内容:
[2021-10-29T07:27:25.053Z] Host lock lease acquired by instance ID '000000000000000000000000F86KCB51'.
[2021-10-29T07:27:25.124Z] Worker process started and initialized.
[2021-10-29T07:27:46.941Z] Executing 'Functions.BlobTriggerLocalTest' (Reason='New blob detected: log/SystemLog/testfile.txt', Id=3981bd58-accb-4c9c-b3e4-fe33b1a74522)
[2021-10-29T07:27:46.948Z] Trigger Details: MessageId: 7c575bad-88b7-46d4-b5bf-67b90fe0ab4d, DequeueCount: 1, InsertionTime: 2021-10-29T07:27:46.000+00:00, BlobCreated: 2021-10-29T07:27:43.000+00:00, BlobLastModified: 2021-10-29T07:27:43.000+00:00
[2021-10-29T07:27:47.032Z] log/SystemLog/testfile.txt
[2021-10-29T07:27:47.037Z] None
[2021-10-29T07:27:47.042Z] []
[2021-10-29T07:27:47.068Z] Executed 'Functions.BlobTriggerLocalTest' (Succeeded, Id=3981bd58-accb-4c9c-b3e4-fe33b1a74522, Duration=204ms)我尝试了一些解决办法来解决这个问题。
第一件事是与文档https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-input?tabs=python一起进行。但是,对我来说,functions.json文件中的变化并不完全清楚。我试着输入
{
"name": "inputblob",
"type": "blob",
"dataType": "binary",
"path": "log/SystemLog/{name}",
"connection": "",
"direction": "in"
},在functions.json文件中,并将inputblob作为第二个参数添加到main-方法中,但是len(inputblob)也打印0。
我也可以使用BlobServiceClient并从azure.storage.blob中导入。但是我想BlobServiceClient需要一个单独的连接字符串,我想避免这种情况。
发布于 2021-11-03 10:12:19
解决方案很简单:不要使用Visual代码作为文件资源管理器每次拖放上载。
本地环境的文档导致我使用VS代码作为本地blob的文件资源管理器。将文件从桌面上传到blob,导致文件内容丢失。该文件以正确的文件名上载,但文件内部为空。使用解决了这个问题。
发布于 2021-10-29 13:33:36
我们可以通过使用download_blob()函数并向其添加content_as_text来读取python代码中的内容。
下面是示例代码:
import logging
import sys
import os
import azure.functions as func
from azure.storage import blob
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
def main(myblob: func.InputStream):
try:
logging.info(f"Python blob trigger function processed blob \n")
CONN_STR = "ADD_CON_STR"
blob_service_client = BlobServiceClient.from_connection_string(CONN_STR)
# MAP SOURCE FILE
blob_client = blob_service_client.get_blob_client(container="newcontainer0805", blob="source.txt")
#SOURCE CONTENTS
content = blob_client.download_blob().content_as_text
print(content)稍后,您可以将内容打印为print (内容)。
https://stackoverflow.com/questions/69765748
复制相似问题