【发布时间】:2018-02-03 14:48:14
【问题描述】:
我在 Visual Studio 2017 中使用最新的 Azure Function SDK,我想将一个 Blob 从一个容器复制到另一个容器。名称保持不变,但将从源 blob 的元数据中检索容器名称。
我一开始只是尝试触发函数并将元数据包含为:
[FunctionName("ScanFile")]
public static void Run([BlobTrigger("tobescanned/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, IDictionary<string, string> metadata, string name, TraceWriter log)
{
log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
log.Info($"metadata count {metadata.Count}");
}
这行得通,因此尝试将副本复制为:
[FunctionName("ScanFile")]
public static void Run([BlobTrigger("tobescanned/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, IDictionary<string, string> metadata, string name,
[Blob("employees/{name}", Connection = "AzureWebJobsStorage")]Stream outputBlob,
TraceWriter log)
{
log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
log.Info($"metadata count {metadata.Count}");
myBlob.CopyTo(outputBlob);
}
但是现在函数不是事件调用,所以绑定有问题。有什么明显的我做错了吗?我发现使用新的 Function SDK 很难找到示例。
下一步(当我让它工作时)是在运行时设置输出容器。我想可能是这样的:
[FunctionName("ScanFile")]
public static void Run([BlobTrigger("tobescanned/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, IDictionary<string, string> metadata, string name,
[Blob("{outputContainer}/{name}", Connection = "AzureWebJobsStorage")]Stream outputBlob, string outputContainer,
TraceWriter log)
{
log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
log.Info($"metadata count {metadata.Count}");
outputContainer = metadata["Destination"];
myBlob.CopyTo(outputBlob);
}
这看起来会起作用吗(当我的输出正常工作时)?
谢谢
【问题讨论】:
-
Ex 2 - 在部署
function.json时查看它生成的绑定。 Ex 3 不起作用,您可能需要使用ICollector。 -
@Mikhail
function.json只有输入绑定,不显示输出所以不太确定我做错了什么
标签: c# azure azure-functions