如何指定VS代码绑定以将文件从/tmp上载到Azure函数中的blob存储



我有一个用Python 3.8编写的Azure函数,它在/tmp中创建了一个文本文件。我想将其上传到blob存储。我被迫在VS Code中进行本地开发,并且需要在function.json中进行绑定。问题是绑定希望我指定一个表示blob的数据项,并且由于我是通过将文本文件上传到存储帐户中的容器来从头开始创建blob的,因此我的代码中没有任何此类数据项。所以我总是犯错。

具体地说,我有一个名为";swsw-2020";在我的存储帐户中。以下是我用来将文件从/tmp上传到该容器的代码。

try:
from azure.storage.blob import BlobServiceClient, BlobClient # noqa
# Create the BlobServiceClient that is used to call the Blob service for the storage account
blob_service_client = BlobServiceClient.from_connection_string(conn_str=connection_string)
# Upload the output file, use destination for the blob name
blob_client = blob_service_client.get_blob_client(
container=container_name, blob=destination)
with open(filename, "rb") as data:
blob_client.upload_blob(data)
except Exception as err:
log_error(f"Failed to upload '{filename}' to Azure Blob Storage: {err}")

这是我的function.json片段,它显然是错误的,但我完全不知道如何使它正确。

{
"type": "blob",
"direction": "out",
"name": "data",
"path": "swsw-2020",
"connection": "AzureWebJobsStorage"
}

我对更好的方法持完全开放的态度。我只想把我在/tmp中的TXT文件上传到";swsw-2020";容器。谢谢

更新:

您可以使用一种简单的方法来动态设置blob名称:

这就是函数.json:

{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"route": "{test}",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"name": "outputblob",
"type": "blob",
"path": "test1/{test}.txt",
"connection": "str",
"direction": "out"
}
]
}

然后,例如,如果你想创建一个名为1.txt的blob,你可以点击下面的函数:http://localhost:7071/api/1

原始答案:

您可以先上传文件,然后再将其存储在某个文件夹中。(这是因为你可能会面临访问权限方面的一些问题。(

您似乎没有使用输出绑定,只是手动连接到存储。

输出绑定应该这样使用:

_init_.py

import logging
import azure.functions as func
def main(req: func.HttpRequest,outputblob: func.Out[func.InputStream],) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
testdata = 'this is test.'
outputblob.set(testdata)
name = req.params.get('name')
return func.HttpResponse(f"This is output binding test, "+name)

function.json

{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"name": "outputblob",
"type": "blob",
"path": "test1/test.txt",
"connection": "str",
"direction": "out"
}
]
}

如果有更多疑问,请告诉我。

最新更新