Скопировать блоб блоб Azure в общую папку Azure? - PullRequest
0 голосов
/ 21 марта 2019

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

void Main()
{
    string myfile =@"Image267.png";

    CredentialEntity backupCredentials = Utils.GetBackupsCredentials();
    CloudStorageAccount backupAccount = new CloudStorageAccount(new StorageCredentials(backupCredentials.Name, backupCredentials.Key), true);
    CloudBlobClient backupClient = backupAccount.CreateCloudBlobClient();
    CloudBlobContainer backupContainer = backupClient.GetContainerReference(@"archive");
    CloudBlockBlob blob = backupContainer.GetBlockBlobReference(myfile);

    CredentialEntity fileCredentails = Utils.GetFileCredentials();
    CloudStorageAccount fileAccount = new CloudStorageAccount(new StorageCredentials(fileCredentails.Name,fileCredentails.Key), true);
    CloudFileClient fileClient =    fileAccount.CreateCloudFileClient();
    CloudFileShare share = fileClient.GetShareReference(@"xfer");

    if (share.Exists())
    {
        CloudFileDirectory rootDir = share.GetRootDirectoryReference();
        CloudFileDirectory sampleDir = rootDir.GetDirectoryReference("hello");
        if (sampleDir.Exists())
        {
             CloudFile file = sampleDir.GetFileReference(myfile);
//           blob.DownloadToFile(file.ToString());
        }       
    }
}

Часть, которая не работает, является закомментированной строкой blob.DownloadToFile

Есть идеи, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

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

Вы можете использовать токен SAS (для исходного BLOB-объекта или исходного файла) для копирования файловBLOB-объектов / или копировать BLOB-объекты в файлы в той же учетной записи хранения или другой учетной записи хранения.

Пример кода, приведенный ниже (скопируйте BLOB-файл в файл в той же учетной записи хранения, и вы можете внести небольшие изменения, если онинаходятся в другой учетной записи хранения):

        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection string");

            var blobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = blobClient.GetContainerReference("t0201");
            CloudBlockBlob sourceCloudBlockBlob = cloudBlobContainer.GetBlockBlobReference("test.txt");

            //Note that if the file share is in a different storage account, you should use CloudStorageAccount storageAccount2 = CloudStorageAccount.Parse("the other storage connection string"), then use storageAccount2 for the file share.
            CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
            CloudFileShare share = fileClient.GetShareReference("testfolder");
            CloudFile destFile = share.GetRootDirectoryReference().GetFileReference("test.txt");

            //Create a SAS for the source blob
            string blobSas = sourceCloudBlockBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24)
            });

            Uri blobSasUri = new Uri(sourceCloudBlockBlob.StorageUri.PrimaryUri.ToString()+blobSas);
            destFile.StartCopy(blobSasUri);

            Console.WriteLine("done now");
            Console.ReadLine();
        }

это хорошо работает на моей стороне, надеюсь, это поможет.

1 голос
/ 22 марта 2019

Есть несколько сэмплов в здесь , но в точечной сети.Альтернативой, не связанной с кодом, было бы использование Azcopy , которое помогло бы переносить данные из BLOB-объекта в File Shares и наоборот.

Внешние предложения: Кажется, что следующий инструмент под названием Blobxfer поддерживает передачу, но в python.

...