/// <summary> /// Deletes an upload. /// </summary> /// <param name="teantId">Tenant identifier.</param> /// <param name="uploadId">Upload identifier.</param> /// <param name="storageHierarchy">Location of upload. E.g. { "Uploads" > "Users" }.</param> /// <param name="unitOfWork">Unit of work.</param> public void Delete(long tenantId, long uploadId, List <string> storageHierarchy, IUnitOfWork unitOfWork = null) { // If we don't have a unit of work in place, create one now so that we can rollback all changes in case of failure IUnitOfWork localUnitOfWork = unitOfWork == null?_unitOfWorkFactory.CreateUnitOfWork() : null; // Try to delete upload try { // Get main upload details from upload repository Upload upload = _uploadRepository.Read(tenantId, uploadId, unitOfWork ?? localUnitOfWork); // Delete record of upload _uploadRepository.Delete(tenantId, uploadId, unitOfWork ?? localUnitOfWork); // Delete upload in storage _storageService.Delete(upload, storageHierarchy, unitOfWork ?? localUnitOfWork); // Commit work if local unit of work in place if (localUnitOfWork != null) { localUnitOfWork.Commit(); } } catch { if (localUnitOfWork != null) { localUnitOfWork.Rollback(); } throw; } finally { if (localUnitOfWork != null) { localUnitOfWork.Dispose(); } } }
/// <summary> /// Deletes an upload from underlying storage. /// </summary> /// <param name="upload">The upload to delete from underlying storage.</param> /// <param name="storageHierarchy">Location of created upload. E.g. { "Uploads" > "Users" }.</param> /// <param name="unitOfWork">Unit of work.</param> public void Delete(Upload upload, List <string> storageHierarchy, IUnitOfWork unitOfWork = null) { // Get Azure storage configuration AzureStorageConfiguration configuration = _azureConfigurationService.GetStorageConfiguration(upload, storageHierarchy); // Retrieve storage account from connection string CloudStorageAccount storageAccount = CloudStorageAccount.Parse(configuration.ConnectionString); // Create the blob client CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // Retrieve reference to a previously created container CloudBlobContainer blobContainer = blobClient.GetContainerReference(configuration.BlobContainerName); // Retrieve reference to blob CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(configuration.BlobPath); // If block blob exists, delete it if (blockBlob.ExistsAsync().Result) { blockBlob.DeleteAsync().Wait(); } }