У меня есть большой двоичный объект в исходной виртуальной папке, и мне нужно переместить исходный большой двоичный объект в другую виртуальную папку и удалить исходный большой двоичный объект с помощью функционального приложения Azure.
копирование данных BLOB-объектов из одного каталога в другой
удаление исходного большого двоичного объекта
пожалуйста, проведите меня через код приложения-функции, как скопировать капли из одного каталога в другой и удалить капли
Я сталкиваюсь с некоторыми проблемами при копировании больших двоичных объектов в другой каталог.
public async static void CopyDelete(ILogger log)
{
var ConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// details of our source file
CloudBlobContainer sourceContainer = blobClient.GetContainerReference("Demo");
var sourceFilePath = "SourceFolder";
var destFilePath = "SourceFolder/DestinationFolder";
CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(sourceFilePath);
CloudBlobDirectory dira = sourceContainer.GetDirectoryReference(sourceFilePath);
CloudBlockBlob destinationblob = sourceContainer.GetBlockBlobReference(destFilePath);
try
{
var rootDirFolders = dira.ListBlobsSegmentedAsync(true, BlobListingDetails.Metadata, null, null, null, null).Result;
foreach (var blob in rootDirFolders.Results)
{
log.LogInformation("Blob Detials " + blob.Uri);
//var sas = sourceBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
//{
// Permissions = SharedAccessBlobPermissions.Read,
// SharedAccessStartTime = DateTimeOffset.Now.AddMinutes(-5),
// SharedAccessExpiryTime = DateTimeOffset.Now.AddHours(2)
//});
// copy to the blob using the
destinationblob = sourceContainer.GetBlockBlobReference(destFilePath);
// var sourceUri = new Uri(blob.Uri);
await destinationblob.StartCopyAsync(blob.Uri);
// copy may not be finished at this point, check on the status of the copy
while (destinationblob.CopyState.Status == Microsoft.WindowsAzure.Storage.Blob.CopyStatus.Pending)
{
await Task.Delay(1000);
await destinationblob.FetchAttributesAsync();
await sourceBlob.DeleteIfExistsAsync();
}
}
if (destinationblob.CopyState.Status != Microsoft.WindowsAzure.Storage.Blob.CopyStatus.Success)
{
throw new InvalidOperationException($"Copy failed: {destinationblob.CopyState.Status}");
}
}
catch (Exception ex)
{
throw ex;
}
}