хранилище BLOB-объектов Azure httptrigger с использованием Python - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь настроить доступ к хранилищу BLOB-объектов с помощью приложения-функции Python, но имя файла получено из запроса на публикацию, а не предварительно. Часть триггера 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 в моем пути. Когда я делаю этот контейнер / {variable}, я получаю исключение нулевой ссылки. Это мой код 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 и использую только портал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...