我创建了一个 blob 触发器,它接受来自 blob 的文件,将其解压缩并使用流将其移动到另一个 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 文件中使用“AzureWebJobsStorage”:“UseDevelopmentStorage=true”在本地运行时起作用。
但是,一旦我部署了这个应用程序并使用 Azure 存储资源管理器将文件上传到真实容器,什么都没有发生,并且活动日志显示操作在 Write.Tiny.txt.gz 中失败,找不到文件'D:\home \site\wwwroot\Requests\tiny.txt.gz'。
我有可以工作的 http 触发器,并且我尝试关闭配置 WEBSITE_RUN_FROM_PACKAGE 无效。我可能缺少一些设置或配置吗?当我在函数应用程序中控制台进入此路径并 cat 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"
}