diff --git a/README.md b/README.md
index 3089813..ef802f1 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,7 @@ Add the following keys to `~/Web.config`
+
@@ -39,6 +40,7 @@ Add the following keys to `~/Web.config`
| `MediaPrefix` | Sometimes | N/A | The prefix for any media files being added to S3. Essentially a root directory name. Required when using `Umbraco.Storage.S3.Media` |
| `FormsPrefix` | Sometimes | N/A | The prefix for any Umbraco Forms data files being added to S3. Essentially a root directory name. Required when using `Umbraco.Storage.S3.Forms` |
| `BucketName` | Yes | N/A | The name of your S3 bucket. |
+| `FileACL` | Yes | N/A | The ACL to apply to S3 items. |
| `BucketHostname` | Sometimes | N/A | The hostname for your bucket (e.g. `test-s3-bucket.s3.eu-west-2.amazonaws.com`). Required when `DisableVirtualPathProvider` is set to `true` |
| `DisableVirtualPathProvider` | No | `false` | Setting this to `true` will disable the VPP functionality. See below for more info. |
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/BucketFormsFileSystemComposer.cs b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/BucketFormsFileSystemComposer.cs
index e75b494..e3df248 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/BucketFormsFileSystemComposer.cs
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/BucketFormsFileSystemComposer.cs
@@ -1,4 +1,5 @@
-using System.Configuration;
+using System;
+using System.Configuration;
using Amazon.S3;
using Umbraco.Core;
using Umbraco.Core.Composing;
@@ -7,6 +8,7 @@
using Umbraco.Core.Logging;
using Umbraco.Forms.Core.Components;
using Umbraco.Forms.Data.FileSystem;
+using Umbraco.Storage.S3.Extensions;
using Umbraco.Storage.S3.Services;
namespace Umbraco.Storage.S3.Forms
@@ -23,21 +25,26 @@ public void Compose(Composition composition)
{
var bucketName = ConfigurationManager.AppSettings[$"{AppSettingsKey}:BucketName"];
- if (bucketName != null)
- {
- var config = CreateConfiguration();
+
+ if (bucketName == null) return;
+
+ var config = CreateConfiguration();
+
+ composition.RegisterUnique(config);
+ composition.Register(new DefaultMimeTypeResolver());
+ if (config.CacheEnabled)
+ composition.Register(new FileSystemCacheProvider(TimeSpan.FromMinutes(config.CacheMinutes), "~/App_Data/S3Cache/Forms/"));
+ else
+ composition.Register(null);
- composition.RegisterUnique(config);
- composition.Register(new DefaultMimeTypeResolver());
- composition.RegisterUniqueFor(f => new BucketFileSystem(
- config: config,
- mimeTypeResolver: f.GetInstance(),
- fileCacheProvider: null,
- logger: f.GetInstance(),
- s3Client: new AmazonS3Client(Amazon.RegionEndpoint.GetBySystemName(config.Region))
- ));
- }
+ composition.RegisterUniqueFor(f => new BucketFileSystem(
+ config: config,
+ mimeTypeResolver: f.GetInstance(),
+ fileCacheProvider: f.GetInstance(),
+ logger: f.GetInstance(),
+ s3Client: new AmazonS3Client(Amazon.RegionEndpoint.GetBySystemName(config.Region))
+ ));
}
@@ -45,15 +52,19 @@ private BucketFileSystemConfig CreateConfiguration()
{
var bucketName = ConfigurationManager.AppSettings[$"{AppSettingsKey}:BucketName"];
var bucketHostName = ConfigurationManager.AppSettings[$"{AppSettingsKey}:BucketHostname"];
- var bucketPrefix = ConfigurationManager.AppSettings[$"{AppSettingsKey}:FormsPrefix"];
+ var bucketPrefix = ConfigurationManager.AppSettings[$"{AppSettingsKey}:MediaPrefix"];
var region = ConfigurationManager.AppSettings[$"{AppSettingsKey}:Region"];
+ var fileACL = ConfigurationManager.AppSettings[$"{AppSettingsKey}:FileACL"];
+ var cacheMinutes = ConfigurationManager.AppSettings[$"{AppSettingsKey}:CacheMinutes"];
+
bool.TryParse(ConfigurationManager.AppSettings[$"{AppSettingsKey}:DisableVirtualPathProvider"], out var disableVirtualPathProvider);
+ bool.TryParse(ConfigurationManager.AppSettings[$"{AppSettingsKey}:CacheEnabled"], out var cacheEnabled);
if (string.IsNullOrEmpty(bucketName))
throw new ArgumentNullOrEmptyException("BucketName", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:BucketName' from AppSettings");
if (string.IsNullOrEmpty(bucketPrefix))
- throw new ArgumentNullOrEmptyException("BucketPrefix", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:FormsPrefix' from AppSettings");
+ throw new ArgumentNullOrEmptyException("BucketPrefix", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:MediaPrefix' from AppSettings");
if (string.IsNullOrEmpty(region))
throw new ArgumentNullOrEmptyException("Region", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:Region' from AppSettings");
@@ -61,15 +72,25 @@ private BucketFileSystemConfig CreateConfiguration()
if (disableVirtualPathProvider && string.IsNullOrEmpty(bucketHostName))
throw new ArgumentNullOrEmptyException("BucketHostname", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:BucketHostname' from AppSettings");
+ if (string.IsNullOrEmpty(fileACL))
+ throw new ArgumentNullOrEmptyException("FileACL", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:FileACL' from AppSettings");
+
+ if (string.IsNullOrEmpty(cacheMinutes))
+ throw new ArgumentNullOrEmptyException("CacheMinutes", $"The AWS S3 Bucket File System (Forms) is missing the value '{AppSettingsKey}:CacheMinutes' from AppSettings");
+ if (!int.TryParse(cacheMinutes, out var minutesToCache))
+ throw new ArgumentOutOfRangeException("CacheMinutes", $"The AWS S3 Bucket File System (Forms) value '{AppSettingsKey}:CacheMinutes' is not a valid integer");
+
return new BucketFileSystemConfig
{
BucketName = bucketName,
BucketHostName = bucketHostName,
BucketPrefix = bucketPrefix.Trim(Delimiters),
Region = region,
- CannedACL = new S3CannedACL("public-read"),
+ CannedACL = AclExtensions.ParseCannedAcl(fileACL),
ServerSideEncryptionMethod = "",
- DisableVirtualPathProvider = disableVirtualPathProvider
+ DisableVirtualPathProvider = disableVirtualPathProvider,
+ CacheEnabled = cacheEnabled,
+ CacheMinutes = minutesToCache
};
}
}
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.csproj b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.csproj
index 3bda97f..c2ec2fb 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.csproj
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.csproj
@@ -34,10 +34,10 @@
- ..\packages\AWSSDK.Core.3.3.103.29\lib\net45\AWSSDK.Core.dll
+ ..\packages\AWSSDK.Core.3.7.0.44\lib\net45\AWSSDK.Core.dll
- ..\packages\AWSSDK.S3.3.3.104.17\lib\net45\AWSSDK.S3.dll
+ ..\packages\AWSSDK.S3.3.7.1.14\lib\net45\AWSSDK.S3.dll
..\packages\EPPlus.4.5.3.2\lib\net40\EPPlus.dll
@@ -181,7 +181,7 @@
-
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.nuspec b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.nuspec
index 44cd14d..83f6499 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.nuspec
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/Umbraco.Storage.S3.Forms.nuspec
@@ -1,18 +1,18 @@
- Our.Umbraco.FileSystemProviders.S3.Forms
- 8.1.1
+ CitadelGroup.Umbraco.FileSystemProviders.S3.Forms
+ 8.4.0
$author$
$author$
- https://github.com/DannerrQ/Umbraco-S3-Provider
- https://github.com/DannerrQ/Umbraco-S3-Provider
+ https://github.com/kingdamo/Umbraco-S3-Provider
+ https://github.com/kingdamo/Umbraco-S3-Provider
false
AWS S3 Filesystem provider for Umbraco Forms
- Copyright 2020
+ Copyright 2021
Umbraco Aws S3 Provider Forms
-
+
\ No newline at end of file
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/packages.config b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/packages.config
index 5ae847c..68d28eb 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/packages.config
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Forms/packages.config
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/BucketMediaFileSystemComposer.cs b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/BucketMediaFileSystemComposer.cs
index 1885b8f..5572726 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/BucketMediaFileSystemComposer.cs
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/BucketMediaFileSystemComposer.cs
@@ -1,9 +1,11 @@
-using System.Configuration;
+using System;
+using System.Configuration;
using Amazon.S3;
using Umbraco.Core;
using Umbraco.Core.Composing;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Logging;
+using Umbraco.Storage.S3.Extensions;
using Umbraco.Storage.S3.Services;
namespace Umbraco.Storage.S3.Media
@@ -18,24 +20,28 @@ public void Compose(Composition composition)
{
var bucketName = ConfigurationManager.AppSettings[$"{AppSettingsKey}:BucketName"];
- if (bucketName != null)
- {
- var config = CreateConfiguration();
+
+ if (bucketName == null) return;
+
+ var config = CreateConfiguration();
- composition.RegisterUnique(config);
- composition.Register(new DefaultMimeTypeResolver());
+ composition.RegisterUnique(config);
+ composition.Register(new DefaultMimeTypeResolver());
- composition.SetMediaFileSystem((f) => new BucketFileSystem(
- config: config,
- mimeTypeResolver: f.GetInstance(),
- fileCacheProvider: null,
- logger: f.GetInstance(),
- s3Client: new AmazonS3Client(Amazon.RegionEndpoint.GetBySystemName(config.Region))
- ));
+ if(config.CacheEnabled)
+ composition.Register(new FileSystemCacheProvider(TimeSpan.FromMinutes(config.CacheMinutes),"~/App_Data/S3Cache/Media/"));
+ else
+ composition.Register(null);
- composition.Components().Append();
+ composition.SetMediaFileSystem((f) => new BucketFileSystem(
+ config: config,
+ mimeTypeResolver: f.GetInstance(),
+ fileCacheProvider: f.GetInstance(),
+ logger: f.GetInstance(),
+ s3Client: new AmazonS3Client(Amazon.RegionEndpoint.GetBySystemName(config.Region))
+ ));
- }
+ composition.Components().Append();
}
@@ -45,7 +51,11 @@ private BucketFileSystemConfig CreateConfiguration()
var bucketHostName = ConfigurationManager.AppSettings[$"{AppSettingsKey}:BucketHostname"];
var bucketPrefix = ConfigurationManager.AppSettings[$"{AppSettingsKey}:MediaPrefix"];
var region = ConfigurationManager.AppSettings[$"{AppSettingsKey}:Region"];
+ var fileACL = ConfigurationManager.AppSettings[$"{AppSettingsKey}:FileACL"];
+ var cacheMinutes = ConfigurationManager.AppSettings[$"{AppSettingsKey}:CacheMinutes"];
+
bool.TryParse(ConfigurationManager.AppSettings[$"{AppSettingsKey}:DisableVirtualPathProvider"], out var disableVirtualPathProvider);
+ bool.TryParse(ConfigurationManager.AppSettings[$"{AppSettingsKey}:CacheEnabled"], out var cacheEnabled);
if (string.IsNullOrEmpty(bucketName))
throw new ArgumentNullOrEmptyException("BucketName", $"The AWS S3 Bucket File System (Media) is missing the value '{AppSettingsKey}:BucketName' from AppSettings");
@@ -59,15 +69,25 @@ private BucketFileSystemConfig CreateConfiguration()
if (disableVirtualPathProvider && string.IsNullOrEmpty(bucketHostName))
throw new ArgumentNullOrEmptyException("BucketHostname", $"The AWS S3 Bucket File System (Media) is missing the value '{AppSettingsKey}:BucketHostname' from AppSettings");
+ if (string.IsNullOrEmpty(fileACL))
+ throw new ArgumentNullOrEmptyException("FileACL", $"The AWS S3 Bucket File System (Media) is missing the value '{AppSettingsKey}:FileACL' from AppSettings");
+
+ if (string.IsNullOrEmpty(cacheMinutes))
+ throw new ArgumentNullOrEmptyException("CacheMinutes", $"The AWS S3 Bucket File System (Media) is missing the value '{AppSettingsKey}:CacheMinutes' from AppSettings");
+ if(!int.TryParse(cacheMinutes, out var minutesToCache))
+ throw new ArgumentOutOfRangeException("CacheMinutes", $"The AWS S3 Bucket File System (Media) value '{AppSettingsKey}:CacheMinutes' is not a valid integer");
+
return new BucketFileSystemConfig
{
BucketName = bucketName,
BucketHostName = bucketHostName,
BucketPrefix = bucketPrefix.Trim(Delimiters),
Region = region,
- CannedACL = new S3CannedACL("public-read"),
+ CannedACL = AclExtensions.ParseCannedAcl(fileACL),
ServerSideEncryptionMethod = "",
- DisableVirtualPathProvider = disableVirtualPathProvider
+ DisableVirtualPathProvider = disableVirtualPathProvider,
+ CacheEnabled = cacheEnabled,
+ CacheMinutes = minutesToCache
};
}
}
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualFile.cs b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualFile.cs
index 93b4ba8..1778183 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualFile.cs
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualFile.cs
@@ -1,22 +1,31 @@
using System;
+using System.Globalization;
using System.IO;
+using System.Web;
using System.Web.Hosting;
namespace Umbraco.Storage.S3.Media
{
internal class FileSystemVirtualFile : VirtualFile
{
+ private readonly DateTimeOffset _lastModified;
private readonly Func _stream;
- public FileSystemVirtualFile(string virtualPath, Func stream) : base(virtualPath)
+ public FileSystemVirtualFile(string virtualPath, DateTimeOffset lastModified, Func stream) : base(virtualPath)
{
if (stream == null)
throw new ArgumentNullException("stream");
+ _lastModified = lastModified;
_stream = stream;
}
public override Stream Open()
{
+ HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
+ HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
+ HttpContext.Current.Response.Cache.SetMaxAge(TimeSpan.FromDays(7));
+ HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(7));
+ HttpContext.Current.Response.Cache.SetETag(GenerateETag(_lastModified.DateTime, DateTime.Now));
return _stream();
}
@@ -24,5 +33,22 @@ public override bool IsDirectory
{
get { return false; }
}
+
+ private static string GenerateETag(DateTime lastModified, DateTime now)
+ {
+ // Get 64-bit FILETIME stamp
+ long lastModFileTime = lastModified.ToFileTime();
+ long nowFileTime = now.ToFileTime();
+ string hexFileTime = lastModFileTime.ToString("X8", CultureInfo.InvariantCulture);
+
+ // Do what IIS does to determine if this is a weak ETag.
+ // Compare the last modified time to now and if the difference is
+ // less than or equal to 3 seconds, then it is weak
+ if ((nowFileTime - lastModFileTime) <= 30000000)
+ {
+ return "W/\"" + hexFileTime + "\"";
+ }
+ return "\"" + hexFileTime + "\"";
+ }
}
}
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualPathProvider.cs b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualPathProvider.cs
index c4de0c3..1ab2e6b 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualPathProvider.cs
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/FileSystemVirtualPathProvider.cs
@@ -50,7 +50,7 @@ public override VirtualFile GetFile(string virtualPath)
return base.GetFile(virtualPath);
var fileSystemPath = RemovePathPrefix(path);
- return new FileSystemVirtualFile(virtualPath, () => _fileSystem.Value.OpenFile(fileSystemPath));
+ return new FileSystemVirtualFile(virtualPath, _fileSystem.Value.GetLastModified(virtualPath), () => _fileSystem.Value.OpenFile(fileSystemPath));
}
private string RemovePathPrefix(string virtualPath)
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.csproj b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.csproj
index 7abd831..a3a8d54 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.csproj
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.csproj
@@ -57,10 +57,10 @@
- ..\packages\AWSSDK.Core.3.3.103.29\lib\net45\AWSSDK.Core.dll
+ ..\packages\AWSSDK.Core.3.7.0.44\lib\net45\AWSSDK.Core.dll
- ..\packages\AWSSDK.S3.3.3.104.17\lib\net45\AWSSDK.S3.dll
+ ..\packages\AWSSDK.S3.3.7.1.14\lib\net45\AWSSDK.S3.dll
..\packages\LightInject.5.4.0\lib\net46\LightInject.dll
@@ -168,7 +168,7 @@
-
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.nuspec b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.nuspec
index ed49c87..a6deb2b 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.nuspec
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/Umbraco.Storage.S3.Media.nuspec
@@ -1,18 +1,18 @@
- Our.Umbraco.FileSystemProviders.S3.Media
- 8.1.1
+ CitadelGroup.Umbraco.FileSystemProviders.S3.Media
+ 8.4.1
$author$
$author$
- https://github.com/DannerrQ/Umbraco-S3-Provider
- https://github.com/DannerrQ/Umbraco-S3-Provider
+ https://github.com/kingdamo/Umbraco-S3-Provider
+ https://github.com/kingdamo/Umbraco-S3-Provider
false
AWS S3 Filesystem provider for Umbraco media items
- Copyright 2020
+ Copyright 2021
Umbraco Aws S3 Provider Media
-
+
\ No newline at end of file
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/packages.config b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/packages.config
index 115f076..5413f15 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/packages.config
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Media/packages.config
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/Umbraco.Storage.S3.Tests.csproj b/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/Umbraco.Storage.S3.Tests.csproj
index 9f7d30a..fcc656f 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/Umbraco.Storage.S3.Tests.csproj
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/Umbraco.Storage.S3.Tests.csproj
@@ -46,10 +46,10 @@
..\packages\AutoMapper.8.0.0\lib\net461\AutoMapper.dll
- ..\packages\AWSSDK.Core.3.3.103.29\lib\net45\AWSSDK.Core.dll
+ ..\packages\AWSSDK.Core.3.7.0.44\lib\net45\AWSSDK.Core.dll
- ..\packages\AWSSDK.S3.3.3.104.17\lib\net45\AWSSDK.S3.dll
+ ..\packages\AWSSDK.S3.3.7.1.14\lib\net45\AWSSDK.S3.dll
..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll
@@ -206,7 +206,7 @@
-
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/packages.config b/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/packages.config
index 0b974ab..06c5512 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/packages.config
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3.Tests/packages.config
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystem.cs b/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystem.cs
index c07b5a2..0eb02ba 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystem.cs
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystem.cs
@@ -240,9 +240,14 @@ public virtual Stream OpenFile(string path)
{
var persistedStream = FileCacheProvider.Resolve(path);
if (persistedStream != null)
+ {
+ Logger.Verbose(typeof(BucketFileSystem), "Loading {path} from cache", path);
return persistedStream;
+ }
}
+ Logger.Verbose(typeof(BucketFileSystem), "Loading {path} from S3", path);
+
var request = new GetObjectRequest
{
BucketName = Config.BucketName,
@@ -260,7 +265,10 @@ public virtual Stream OpenFile(string path)
stream.Seek(0, SeekOrigin.Begin);
if (FileCacheProvider != null)
+ {
+ Logger.Verbose(typeof(BucketFileSystem), "Persisting {path} to cache", path);
FileCacheProvider.Persist(path, stream);
+ }
return stream;
}
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystemConfig.cs b/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystemConfig.cs
index a4fc655..43a3a5e 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystemConfig.cs
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3/BucketFileSystemConfig.cs
@@ -16,6 +16,10 @@ public class BucketFileSystemConfig
public ServerSideEncryptionMethod ServerSideEncryptionMethod { get; set; }
+ public bool CacheEnabled { get; set; }
+
+ public int CacheMinutes { get; set; }
+
public bool DisableVirtualPathProvider { get; set; }
}
}
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.Core.nuspec b/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.Core.nuspec
index c22929a..067d679 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.Core.nuspec
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.Core.nuspec
@@ -1,21 +1,21 @@
- Our.Umbraco.FileSystemProviders.S3.Core
- 8.1.0
+ CitadelGroup.Umbraco.FileSystemProviders.S3.Core
+ 8.4.1
$title$
- Elijah Glover, Neil Gaietto, Danny Quarton
- Elijah Glover, Neil Gaietto, Danny Quarton
- https://github.com/DannerrQ/Umbraco-S3-Provider
- https://github.com/DannerrQ/Umbraco-S3-Provider
+ Elijah Glover, Neil Gaietto, Danny Quarton, Damien Rider
+ Elijah Glover, Neil Gaietto, Danny Quarton, Damien Rider
+ https://github.com/kingdamo/Umbraco-S3-Provider
+ https://github.com/kingdamo/Umbraco-S3-Provider
false
Base package for AWS S3 Umbraco providers. Required by Umbraco.Storage.S3.Forms and Umbraco.Storage.S3.Media
- Copyright 2020
+ Copyright 2021
Umbraco Aws S3 Provider
-
-
+
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.csproj b/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.csproj
index fcf2211..1a5d43f 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.csproj
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3/Umbraco.Storage.S3.csproj
@@ -43,10 +43,10 @@
- ..\packages\AWSSDK.Core.3.3.103.29\lib\net45\AWSSDK.Core.dll
+ ..\packages\AWSSDK.Core.3.7.0.44\lib\net45\AWSSDK.Core.dll
- ..\packages\AWSSDK.S3.3.3.104.17\lib\net45\AWSSDK.S3.dll
+ ..\packages\AWSSDK.S3.3.7.1.14\lib\net45\AWSSDK.S3.dll
..\packages\LightInject.5.4.0\lib\net46\LightInject.dll
@@ -175,7 +175,7 @@
-
+
diff --git a/Umbraco.Storage.S3/Umbraco.Storage.S3/packages.config b/Umbraco.Storage.S3/Umbraco.Storage.S3/packages.config
index 115f076..5413f15 100644
--- a/Umbraco.Storage.S3/Umbraco.Storage.S3/packages.config
+++ b/Umbraco.Storage.S3/Umbraco.Storage.S3/packages.config
@@ -1,7 +1,7 @@
-
-
+
+