прочитать путь к изображению из общей папки и сохранить в таблице хранения Azure - PullRequest
0 голосов
/ 01 мая 2018

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

CloudStorageAccount cloudStorageAccount = ConnectionString.GetConnectionString();
            CloudFileClient cloudFileClient = cloudStorageAccount.CreateCloudFileClient();             
            CloudFileShare fileShare = cloudFileClient.GetShareReference("sampleimage");
           if (await fileShare.CreateIfNotExistsAsync())
            {
                await fileShare.SetPermissionsAsync(
                    new FileSharePermissions
                    {

                    });
            }
            //fileShare.CreateIfNotExists();

            string imageName = Guid.NewGuid().ToString() + "-" + Path.GetExtension(imageToUpload.FileName);
            CloudFile cloudFile = fileShare.GetRootDirectoryReference().GetFileReference(imageName);
            cloudFile.Properties.ContentType = imageToUpload.ContentType;

            await cloudFile.UploadFromStreamAsync(imageToUpload.InputStream);

            imageFullPath = cloudFile.Uri.ToString();
        }
        catch (Exception ex)
        {

        }
        return imageFullPath;

Вот как я пытаюсь прочитать путь к файлу: [Перед вставкой в ​​таблицу]

public class ReadFileSharePath
{
    string Path = null;
    public string ReadFilePath()
    {

        try
        {
            CloudStorageAccount cloudStorageAccount = ConnectionString.GetConnectionString();
            CloudFileClient cloudFileClient = cloudStorageAccount.CreateCloudFileClient();
            CloudFileShare fileShare = cloudFileClient.GetShareReference("sampleimage");
            if (fileShare.Exists())
            {
                CloudFileDirectory rootdir = fileShare.GetRootDirectoryReference();

                CloudFileDirectory sampleDir = rootdir.GetDirectoryReference("sampleimage");

                if (sampleDir.Exists())
                {
                    // Get a reference to the file we created previously.
                    CloudFile file = sampleDir.GetFileReference("90e94676-492d-4c3c-beb2-1d8d48044e4e-.jpg");

                    // Ensure that the file exists.
                    if (file.Exists())
                    {
                        // Write the contents of the file to the console window.
                        //Console.WriteLine(file.DownloadTextAsync().Result);
                        Path = file.DownloadTextAsync().Result.ToString();
                    }
                }
            }

        }
        catch (Exception)
        {

            throw;
        }
        return Path;

    }

}

Однако, если условие

if (sampleDir.Exists ())

получает сбой. И элемент управления не входит в цикл.

Я хотел бы сохранить путь к общей папке в хранилище таблиц Azure. Я хотел бы получить ключ раздела и ключ строки. Как этого добиться? любая ссылка или предложение поможет? Спасибо.

1 Ответ

0 голосов
/ 01 мая 2018

Как сказал @Gaurav, после того, как вы вернете imageFullPath с приведенным выше кодом, вы можете использовать следующий код для сохранения пути в табличном хранилище.

void SavePath(string fullpath)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

            // Create the table client.
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "people" table.
            CloudTable table = tableClient.GetTableReference("people");

            // Create a new customer entity.
            CustomerEntity customer1 = new CustomerEntity("joey", "cai");
            customer1.path = fullpath;


            // Create the TableOperation object that inserts the customer entity.
            TableOperation insertOperation = TableOperation.Insert(customer1);

            // Execute the insert operation.
            table.Execute(insertOperation);
        }
        public class CustomerEntity : TableEntity
        {
            public CustomerEntity(string lastName, string firstName)
            {
                this.PartitionKey = lastName;
                this.RowKey = firstName;
            }

            public CustomerEntity() { }

            public string path { get; set; }

        }

Примечание. Полный путь - это возвращенный вами imageFullPath.

Редактировать : Объекты отображаются на объекты C # с помощью пользовательского класса, производного от TableEntity. Чтобы добавить сущность в таблицу, создайте класс, который определяет свойства вашей сущности.

Приведенный выше код определяет класс сущности, который использует имя клиента в качестве ключа строки и фамилию в качестве ключа раздела. Вместе раздел сущности и ключ строки однозначно идентифицируют его в таблице. Объекты, которые должны храниться в таблицах, должны иметь поддерживаемый тип, например, производные от класса TableEntity .

И приведенный выше код показывает создание объекта CloudTable, а затем объекта CustomerEntity. Для подготовки операции создается объект TableOperation для вставки сущности клиента в таблицу . Наконец, операция выполняется путем вызова CloudTable.Execute.

Для более подробной информации, вы можете обратиться к этой статье .

Обновление:

Как я понимаю, ключ строки и раздела уникален, следовательно, ошибка.

Итак, когда вы вставляете второй объект в таблицу, он использует один и тот же ключ разделения и ключ строки. Таким образом, вы можете сохранить ключ разделения и изменить значение ключа строки. Измените следующий код на приведенный выше:

CustomerEntity customer1 = new CustomerEntity("joey", "cai"+Guid.NewGuid());
customer1.path = fullpath;
TableOperation insertOperation = TableOperation.Insert(customer1);
table.Execute(insertOperation);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...