尝试将 Azure Blob 存储 URI 添加到 Azure 存储表时出错。

问题描述 投票:0回答:1

我正试图将图像添加到Azure blob存储中,(程序的这部分工作正确)。

一旦每个图像在blob存储中,我想创建一个Azure存储表,实体有两列。图像类别,以及图像URI。

当我尝试插入Azure存储表时,应用程序进入 "中断模式"。

最终,这将被一个移动应用程序使用,该应用程序使用该表选择图像URI作为网格视图的图像源,因此我需要完整的URI。

我已经对类别进行了硬编码,以尝试缩小问题范围。

我在开发过程中使用了Azure存储模拟器。顺便说一下。

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Queue;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace AzureEmulatorTests
{
    class Program
    {
        static async Task Main(string[] args)
        {
            const string localPath = "./data/";
            const string containerName = "mycontainer";
            const string tableName = "mytable";

            var storageAccount = CloudStorageAccount.Parse(@"UseDevelopmentStorage=true");

            var blobClient = storageAccount.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference(containerName);
            await container.CreateIfNotExistsAsync();

            var tableClient = storageAccount.CreateCloudTableClient();
            var table = tableClient.GetTableReference(tableName);
            await table.CreateIfNotExistsAsync();

            string[] filenames = Directory.GetFiles(localPath);

            foreach (var images in filenames)
            {
                string _imageBlobReference = Guid.NewGuid() + ".jpg";

                var blob = container.GetBlockBlobReference(_imageBlobReference);
                await blob.UploadFromFileAsync(images);
                string blobUrl = blob.Uri.AbsoluteUri;

                ImageFile image = new ImageFile("Birthday", blobUrl);

                await table.ExecuteAsync(TableOperation.Insert(image));
            }

            Console.WriteLine("Files Uploaded... Press any key to continue.");
            Console.ReadKey();
        }
    }

    class ImageFile : TableEntity
    {
        public ImageFile(string Category, string ImageURL)
        {
            PartitionKey = Category;
            RowKey = ImageURL;
        }
    }
}
c# azure azure-storage-blobs azure-table-storage azure-storage-emulator
1个回答
3
投票

基本上,问题是与你的值的 RowKey 属性,因为它包含无效字符(/).

中不允许的字符列表。PartitionKeyRowKey,请参见本页面。https:/docs.microsoft.comen-usrestapistorageservicesunderstanding-the-table-service-data-model。.

为了解决这个问题,请将整个URL编码,然后尝试保存。这样应该可以。


0
投票

我发现的解决方案是不要把URL放在PartitionKey或Rowkey属性中。

当我在表中添加了一个字符串属性时,我能够顺利添加URL。

© www.soinside.com 2019 - 2024. All rights reserved.