如何将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
关于如何执行此操作的任何想法?
答案 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();
}
它在我这边工作得很好,希望对您有所帮助。