c# - 动态输出 blob 存储容器名称
问题描述
在为 Azure 函数配置输出 blob 存储容器时,是否可以以某种方式运行一些代码以生成存储 BLOB 的路径?更准确地说,我想GUID
在路径中使用一个新的,每次都会触发这个函数。像这样的东西(代码不起作用):
[FunctionName("BlobTriggered")]
public static void BlobTriggered(
[BlobTrigger("myContainer/{name}.{extension}")] Stream myBlob,
[Blob("myContainer/{Guid.NewGuid()}", FileAccess.Write)] Stream outputContainer,
string name,
string extension,
TraceWriter log)
{
...
}
在上面的代码中,我试图GUID
通过 using生成Guid.NewGuid()
,这不起作用。有没有类似的方法来实现这一点?
解决方案
您可以在{}中设置变量,并在声明部分设置相应的参数,从而在属性中获取该值。但是因为函数声明部分的参数必须在编译时固定,所以我认为你的想法不能使用绑定来完成。但是你仍然可以实现你想要的,请看下面的代码,我使用的是 Storage Blob SDK:
using System;
using System.IO;
using Azure.Storage.Blobs;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace FunctionApp53
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([BlobTrigger("samples-workitems/{name}.{extension}", Connection = "str")]Stream myBlob,
string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
string connectionString = "DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;xxx;EndpointSuffix=core.windows.net";
BlobServiceClient myClient = new BlobServiceClient(connectionString);
var container = myClient.GetBlobContainerClient("samples-workitems");
string a = Guid.NewGuid().ToString();
var blockBlob = container.GetBlobClient(a);
blockBlob.Upload(myBlob);
}
}
}
推荐阅读
- laravel - Laravel 队列事件在页面完全加载之前立即执行
- .net - 对解决方案的任何更改都会产生 CefSharp“找不到文件”错误
- node.js - mongoose suppressWarning 选项
- javascript - 显示输入颜色选择器时无法输入输入文本
- sql - BigQuery,使用 ARRAY_AGG 创建逗号分隔的结果
- asp.net-core - Blazor Webassembly 和 OData(命名空间 Microsoft.Aspnetcore 中不存在 MVC)
- java - Oracle SQL Developer 不会连接到本地数据库,OCI 库不会加载
- graphdb - 不允许使用空 uri
- javascript - 数据在屏幕上呈现,但在控制台上有错误(Firebase with Vue):未捕获(承诺中)TypeError:无法读取 null 的属性“内容”
- vuetify.js - vuetify 数据表在 th 上插入输入