我已经创建了一个blob触发器,它从一个blob接受一个文件,解压缩它,并使用streams将它移动到另一个blob。
我的代码如下所示
[FunctionName("Requests")]
[StorageAccount("samplecontainer")]
public static void Run([BlobTrigger("incoming/{name}")]Stream myBlob,
[Blob("processing/{name}.xml", FileAccess.Write)] TextWriter output,
string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
string returnValue;
using (Stream blob = myBlob)
{
using (GZipStream decompressionStream = new GZipStream(blob, CompressionMode.Decompress))
{
log.LogInformation($"Unzipping file");
name = name.Replace(".gz", "");
var content = String.Empty;
using (StreamReader reader = new StreamReader(decompressionStream))
{
content = reader.ReadToEnd();
reader.Close();
}
returnValue = content;
}
}
log.LogInformation($"C# Blob trigger function finished processing blob\n Name:{name} \n Now writing to xml");
output.WriteLine(returnValue);
}
实际上,这将在本地运行时使用我的local.settings.json文件中的“azurewebjobstorage”:“UseDevelopmentStorage = true”。
然而,一旦我部署了这个应用程序,并使用Azure Storage Explorer将一个文件上传到real container,什么也没有发生,活动日志显示操作在Write.Tiny.txt.gz失败,找不到文件“D:\ home \ site \ wwwroot \ Requests \ tiny . txt . gz”。
我有超文本传输协议触发器可以工作,我已经尝试关闭配置WEBSITE_RUN_FROM_PACKAGE没有效果。我可能错过了一些设置或配置吗?当我在函数应用程序中控制台进入此路径并猫function.json我得到这个:
{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.29",
"configurationSource": "attributes",
"bindings": [
{
"type": "blobTrigger",
"connection": "samplecontainer",
"path": "incoming/{name}",
"name": "myBlob"
}
],
"disabled": false,
"scriptFile": "../bin/azure-functions.dll",
"entryPoint": "Requests.Run"
}
我完全相信我也需要Bowman Zhu的回答才能工作,但在我的具体情况下,我忘记了在appSettings.json中添加存储帐户作为连接字符串,因为我们最近更新到了Microsoft。azure . web jobs . extensions . storage版本3,这是我们的第一个blob触发器。
在appSettings.json:
{
"ConnectionStrings": {
"AzureWebJobsStorage": "{endpoint}"
}
}
好的,我可以重现您的问题。
既然你可以在本地工作,那么你的代码应该没有问题。
我可以解释为什么会发生这种情况。Azure 上的函数应用没有可将数据写入 Azure Blob 存储的 RBAC。
以下步骤可以解决问题:
首先,创建函数应用的标识。
其次,将您的功能应用程序的RBAC角色添加到存储帐户。
顺便说一下,上述设置不会立即生效,您需要等待几分钟才能生效。
我正在使用 Blob 触发器 Azure 函数来获取 Blob 文件数据,只要任何文件上传到容器。 使用上述方法,我能够获取上传的项目的URL。目前,上述代码是使用 Azure 提供的“在门户中开发”选项生成的。 是否有一种方法可以获取已上传的Blob文件的SAS URL?
我在Visual Studio中创建了一个简单的blob触发器,init.py如下 function.json如下 local.settings。json如下所示 此代码在本地计算机上的visual studio中运行良好。但在azure portal上发布时,它无法从函数中读取blob路径。json并给出错误为 我已经使用命令发布了local.settings.json的contains。 .有
我在Python中创建了一个Blob触发函数应用程序。我的要求是为每个blob上传运行一个单独的实例(用于并行处理),但这并没有发生。甚至我也修改了主机。根据以下链接,json如下:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob { “version”: “2.0”, “e
我已将 Azure 函数设置为运行 Blob 触发器,(因此,当将 Blob 添加到容器时,它应该触发)。在门户中打开函数应用之前,函数不会运行。然后,它将拾取已添加的任何 blob 并像往常一样处理它们。为什么需要在门户中打开函数应用才能启动我的作业?这几乎就像函数应用程序进入睡眠状态,然后在我浏览到它时唤醒。我该如何防止这种情况发生? 这是我的克朗
我使用blob触发器读取blob内容,作为pandas DF进行处理,并将blob附加到我使用的Azure SQL server。 blob触发器没有按预期工作,因此我将main函数中的所有代码都定义为: 但是,我得到了以下错误: 有人可以帮助我找到此问题的原因吗? function.json的配置如下:
如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议