Обновление
В Microsoft Flow вызов Rest Api для хранилища Azure кажется недопустимым.Для авторизации нужны заголовки x-ms- *, отправляемые потоком (например, x-ms-tracking-id, x-ms-workflow-id и т. Д.), Добавляемые в stringStr, который не находится под нашим контролем.Более того, подпись действительна только в течение 15 м с момента ее создания.
Есть встроенное действие Get Blob Metadata
.А для хранилища доступны и другие общие действия.
Чтобы задать метаданные BLOB-объектов, я предлагаю разместить логику в функции Azure.
Follow thisучебное пособие для создания приложения Function и функции httptrigger, не забудьте выбрать учетную запись хранения, в которой нам нужно установить метаданные BLOB-объектов.
Заменить образец httptrigger приведенным ниже кодом и изменить metadataName
к тому, что вам нужно.
#r "Microsoft.WindowsAzure.Storage"
using System.Net;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
dynamic data = await req.Content.ReadAsAsync<object>();
if (data == null)
{
return req.CreateResponse(HttpStatusCode.BadRequest, "No request body posted");
}
else
{
string metadata = data.metadata;
string blobName = data.blobName;
string containerName = data.containerName;
try
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("AzureWebJobsStorage"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
CloudBlob blob = blobContainer.GetBlobReference(blobName);
blob.Metadata.Add("metadataName", metadata);
blob.SetMetadata();
}
catch (Exception e)
{
log.Error(e.ToString());
return req.CreateResponse(HttpStatusCode.InternalServerError, "Fail to set metadata");
}
return (string.IsNullOrEmpty(metadata) || string.IsNullOrEmpty(blobName) || string.IsNullOrEmpty(containerName))
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass necessary parameters in the request body")
: req.CreateResponse(HttpStatusCode.OK, $"Metadata of {blobName} has been set");
}
}
В Microsoft Flow создайте действие Http, опубликуйте содержимое ниже для URL-адреса функции, полученной на шаге 2.
{
"metadata": "test",
"blobName":"myblob",
"containerName":"mycontainer"
}