Azure CloudBlob SetMetadata失败,出现"指定的元数据无效.它包含不允许的字符.&qu



我很确定这是Windows Azure SDK(使用最新的1.4)的限制,但是必须有一种方法来解决这个问题,而不使用手动REST…

代码:

CloudBlob blob = container.GetBlobReference(url); // works
blob.UploadByteArray(bytes); // works
blob.Metadata["test"] = "public, max-age=259200"; // works
// FAILS with "The metadata specified is invalid. It has characters that are not permitted."
blob.Metadata["x-ms-blob-cache-control"] = "public, max-age=259200";
blob.SetMetadata(); // FAILS due to the 2nd meta data

从我的测试中可以很清楚地看出,由于这些破折号'-',客户端正在爆炸,但我想不出任何方法来解决这个问题。设置缓存控制是非常重要的,也是常见的操作,这让我很困惑,为什么我找不到其他人报告这个问题。

我还尝试过对数据进行编码,这在技术上应该是不必要的,但出于绝望,我还是这样做了。想法吗?

这最终成为一个愚蠢的SDK限制,毕竟有一个特定的属性,反过来为您设置特定的元数据…我不介意有这个属性作为一个助手,但我认为没有理由为什么直接设置元不应该工作。

blob.Properties.CacheControl = "public, max-age=259200";
blob.UploadByteArray(bytes);

您今天仍然得到此消息,但在nuget包Azure.Storage中替换了'BlobContainerClient'。Blobs,版本12.14.1。下面是使用Azure和部署在Azure的版本:

var blobClient = blobContainerClient.GetBlobClient(blobName);
    if (await blobClient.ExistsAsync())
    {
        // Azurite doesn't support tags and Azure doesn't support use of metadata so make it work case by case.
        var isLocalEnvironment = string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID"));
        if (!isLocalEnvironment)
        {
            // This solution works only in Azure.
            var tags = new Dictionary<string, string>
            {
                { "TagKey1", "value1" },
                { "TagKey2", "value2" },
            };
            await blobClient.SetTagsAsync(tags);
        }
        else
        {
            // This solution works in Azurite (it does work in Azure also - but only without special characters).
            BlobProperties properties = blobClient.GetProperties();
            properties.Metadata["TagKey1"] = "value1";
            properties.Metadata["TagKey2"] = "value2";
            await blobClient.SetMetadataAsync(properties.Metadata);
        }
    }

允许的特殊字符:

https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags?source=recommendations&标签= azure-ad

最新更新