将Azure块Blob复制到Azure文件共享吗?

时间:2019-03-21 15:52:55

标签: azure-storage-blobs

如何将Azure存储中的块(或页面)blob复制到Azure文件共享? 如果将块Blob下载到本地文件,则我的示例代码可以正常工作,但是似乎没有下载到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 个答案:

答案 0 :(得分:1)

here中有一些示例,但在点网中。与代码无关的替代方法是使用Azcopy,它将有助于将数据从Blob传输到文件共享,反之亦然。

外部建议: 以下名为Blobxfer的工具似乎支持传输,但使用python。

答案 1 :(得分:1)

官方文档here中有一个示例:它用于将文件从文件共享复制到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();
        }

它在我这边工作得很好,希望对您有所帮助。