Ошибка при попытке добавить URI хранилища BLOB-объектов Azure в таблицу хранилища Azure - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь добавить изображения в Azure хранилище BLOB-объектов (эта часть программы работает правильно).

После того, как каждое изображение окажется в хранилище BLOB-объектов, я хочу создать хранилище Azure таблица с сущностью, имеющей два столбца. Категория изображения и URI изображения.

Когда я пытаюсь вставить в таблицу Azure Storage, приложение переходит в «режим остановки».

В конечном итоге это будет использоваться мобильным приложением, которое использует таблицу для выбора URI изображений в качестве источника изображения для представления сетки, поэтому мне нужен полный URI.

Я жестко запрограммировал категорию для попробуйте сузить проблему.

Я использую Azure Storage Emulator во время разработки. К вашему сведению.

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;
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

В основном проблема связана со значением вашего атрибута RowKey, поскольку он содержит недопустимый символ (/).

Список недопустимых символов в PartitionKey и RowKey см. На этой странице: https://docs.microsoft.com/en-us/rest/api/storageservices/understanding-the-table-service-data-model.

Чтобы решить эту проблему, закодируйте URL весь URL-адрес, а затем попробуйте сохранить его. Это должно сработать.

0 голосов
/ 13 мая 2020

Решение, которое я нашел, - не помещать URL-адрес в свойства PartitionKey или Rowkey.

Когда я добавил строковое свойство в таблицу, я смог без проблем добавить URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...