gpt4 book ai didi

python - 使用 Python 的 azure httptrigger blob 存储

转载 作者:行者123 更新时间:2023-12-02 07:25:37 27 4
gpt4 key购买 nike

我正在尝试使用 python 函数应用程序设置对 blob 存储的访问,但文件名是从未预设的发布请求接收的。 http 触发器部分可以工作,但我在访问 blob 存储中的文件时遇到问题。这是我的 json:

{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"post",
"get"
]
},
{
"name": "inputblob",
"type": "blob",
"path": "sites/{httpTrigger}",
"connection": "STORAGE",
"direction": "in"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"disabled": false
}

我看到一个使用队列触发器的示例( https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#input---configuration ),但是当我使用 http 执行类似操作时,我得到“命名参数“httpTrigger”没有值”。我的问题是我不知道如何反射(reflect)在我的路径中的 python 代码中分配的变量。当我执行此容器/{变量} 时,我收到空引用异常。这是我的Python代码:

import os
import json
import sys
import logging
import azure.functions as func


_AZURE_FUNCTION_DEFAULT_METHOD = "GET"
_AZURE_FUNCTION_HTTP_INPUT_ENV_NAME = "req"
_AZURE_FUNCTION_HTTP_OUTPUT_ENV_NAME = "res"
_REQ_PREFIX = "REQ_"
def write_http_response(status, response):
output = open(os.environ[_AZURE_FUNCTION_HTTP_OUTPUT_ENV_NAME], 'w')
output.write(json.dumps(response))


env = os.environ
postreqdata = json.loads(open(env['req']).read())
print ('site: ' + postreqdata['site'])
site = postreqdata['site']+'.xlsx'
input_file = open(os.environ['inputBlob'], 'r')
clear_text = input_file.read()
input_file.close()
print("Content in the blob file: '{0}'".format(clear_text))

# Get HTTP METHOD
http_method = env['REQ_METHOD'] if 'REQ_METHOD' in env else
_AZURE_FUNCTION_DEFAULT_METHOD
print("HTTP METHOD => {}".format(http_method))

# Get QUERY STRING
req_url = env['REQ_HEADERS_X-ORIGINAL-URL'] if 'REQ_HEADERS_X-ORIGINAL-URL'
in env else ''
urlparts =req_url.split('?')
query_string = urlparts[1] if len(urlparts) == 2 else ''
print("QUERY STRING => {}".format(query_string))

if http_method.lower() == 'post':
request_body = open(env[_AZURE_FUNCTION_HTTP_INPUT_ENV_NAME], "r").read()
print("REQUEST BODY => {}".format(request_body))

write_http_response(200, site)

注意:我已经成功创建了连接字符串(我认为),并且我是 azure 新手并且仅使用门户

最佳答案

这看起来像是旧版本的函数应用。在新版本中,您实际上可以使用请求处理程序来为您完成所有这些工作。我刚刚开始使用 azure 函数,如果你想访问 blob 存储中的文件,你所要做的就是以 http 查询的形式传入文件名参数,并使用该查询参数名称作为绑定(bind)变量。例如:

def main(req: func.HttpRequest, inputblob: func.InputStream):
input_file_content = input_blob.read()

并在您的绑定(bind)中给出

{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "blob",
"direction":"in",
"name": "inputblob",
"path": "upload/{filename}",
"connection": "AzureWebJobsStorage"
}
]
}

您只需使用查询参数文件名调用 api

http://localhost:7071/api/HttpTriggerFileUpload?filename=file.ext

您可以看看this

关于python - 使用 Python 的 azure httptrigger blob 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55265240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com