From b7f6e70d29b50ff8785df687f5913c025032f9b5 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 20 Oct 2010 17:30:30 -0700 Subject: [PATCH] Handle Azure folder creation - Azure Blobs don't handle folders, have to create a fake "hidden" file entry to simulate the folder exists --HG-- branch : dev --- .../Media/AzureBlobStorageProviderTests.cs | 1 - src/Orchard.Azure/AzureFileSystem.cs | 13 +++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Azure.Tests/FileSystems/Media/AzureBlobStorageProviderTests.cs b/src/Orchard.Azure.Tests/FileSystems/Media/AzureBlobStorageProviderTests.cs index 2b2c5baab..2e08c6174 100644 --- a/src/Orchard.Azure.Tests/FileSystems/Media/AzureBlobStorageProviderTests.cs +++ b/src/Orchard.Azure.Tests/FileSystems/Media/AzureBlobStorageProviderTests.cs @@ -88,7 +88,6 @@ namespace Orchard.Azure.Tests.FileSystems.Media { [Test] [ExpectedException(typeof(ArgumentException))] public void CreateFolderThatExistsShouldThrow() { - // sebros: In Azure, the folder concept is just about checking files prefix. So until a file exists, a folder is nothing _azureBlobStorageProvider.CreateFile("folder/foo.txt"); _azureBlobStorageProvider.CreateFolder("folder"); } diff --git a/src/Orchard.Azure/AzureFileSystem.cs b/src/Orchard.Azure/AzureFileSystem.cs index 6de706353..958464db4 100644 --- a/src/Orchard.Azure/AzureFileSystem.cs +++ b/src/Orchard.Azure/AzureFileSystem.cs @@ -8,7 +8,10 @@ using Microsoft.WindowsAzure.StorageClient; using Orchard.FileSystems.Media; namespace Orchard.Azure { - public class AzureFileSystem { + public class AzureFileSystem + { + private const string FolderEntry = "$$$ORCHARD$$$.$$$"; + public string ContainerName { get; protected set; } private readonly CloudStorageAccount _storageAccount; @@ -79,6 +82,10 @@ namespace Orchard.Azure { { foreach (var blobItem in BlobClient.ListBlobsWithPrefix(prefix).OfType()) { + // ignore directory entries + if(blobItem.Uri.AbsoluteUri.EndsWith(FolderEntry)) + continue; + yield return new AzureBlobFileStorage(blobItem); } } @@ -117,7 +124,9 @@ namespace Orchard.Azure { using (new HttpContextWeaver()) { Container.EnsureDirectoryDoesNotExist(path); - Container.GetDirectoryReference(path); + + // Creating a virtually hidden file to make the directory an existing concept + CreateFile(path + "/" + FolderEntry); } }