Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python的azure httptrigger blob存储_Python_Azure - Fatal编程技术网

使用Python的azure httptrigger blob存储

使用Python的azure httptrigger blob存储,python,azure,Python,Azure,我试图使用python函数应用程序设置对blob存储的访问,但文件名是从post请求接收的,而不是预设的。http触发器部分工作正常,但访问blob存储中的文件时遇到问题。这是我的json: { "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "post", "get" ] }, {

我试图使用python函数应用程序设置对blob存储的访问,但文件名是从post请求接收的,而不是预设的。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
}
我看到了一个使用队列触发器的示例(),但当我使用http执行类似操作时,我得到“命名参数“httpTrigger”没有值”。我的问题是,我不知道如何在路径中反映python代码中分配的变量。当我执行这个container/{variable}时,我得到一个nullreference异常。这是我的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新手,只使用门户网站。这看起来像是旧版本的function apps。在新版本中,您实际上可以使用请求处理程序为您完成所有这些工作。我刚开始使用azure函数,如果您想访问blob存储中的文件,您所要做的就是以http查询的形式传入文件名参数,并使用该查询参数名称作为绑定变量。 例:

def main(请求:func.HttpRequest,inputblob:func.InputStream): input\u file\u content=input\u blob.read() 在你的束缚中,你给予

{
“脚本文件”:“\uuuu init\uuuuu.py”,
“绑定”:[
{
“authLevel”:“函数”,
“类型”:“httpTrigger”,
“方向”:“在”,
“名称”:“请求”,
“方法”:[
“得到”,
“职位”
]
},
{
“类型”:“http”,
“方向”:“输出”,
“名称”:“$return”
},
{
“类型”:“blob”,
“方向”:“在”,
“名称”:“inputblob”,
“路径”:“上传/{filename}”,
“连接”:“AzureWebJobsStorage”
}
]
}
您只需使用查询参数文件名调用api

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

你可以看看