【问题标题】:azure httptrigger blob storage using Python使用 Python 的天蓝色 httptrigger blob 存储
【发布时间】:2019-08-11 09:52:12
【问题描述】:

我正在尝试使用 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://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#input---configuration),但是当我使用 http 执行类似操作时,我得到“命名参数 'httpTrigger' 没有值”。我的问题是我不知道如何在我的路径中反映在我的 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 新手,仅使用门户

【问题讨论】:

    标签: python azure


    【解决方案1】:

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

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

    在你的绑定中你给予

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 2022-01-08
      • 2015-09-09
      • 2015-12-04
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      相关资源
      最近更新 更多