Skip to content

Commit 8b87692

Browse files
committed
Enable streaming (http loader) + StreamPool + Refactoring
1 parent 355b7fc commit 8b87692

File tree

190 files changed

+1037
-1281
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

190 files changed

+1037
-1281
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ services.AddImageWizard(options =>
8181
.WithFilter<BlurFilter>()
8282
.AddSkiaSharp(MimeTypes.WebP)
8383
.AddSvgNet()
84-
.AddDocNET()
84+
. .AddDocNET()
8585
//uses file cache (relative or absolute path)
8686
.SetFileCache(options => options.Folder = "FileCache")
8787
//or MongoDB cache
@@ -93,13 +93,13 @@ services.AddImageWizard(options =>
9393
.AddHttpLoader(options =>
9494
{
9595
//checks every time for a new version of the original image.
96-
options.RefreshMode = ImageLoaderRefreshMode.EveryTime;
96+
options.RefreshMode = DataLoaderRefreshMode.EveryTime;
9797

9898
//set base url for relative urls
9999
options.DefaultBaseUrl = "https://mydomain";
100100

101101
//allow only relative urls
102-
//(use base url from request or DefaultBaseUrl from options)
102+
//(use base url from request or DefaultBaseUrl from options)
103103
options.AllowAbsoluteUrls = false;
104104

105105
//allow only specified hosts

src/ImageWizard.AWS/AwsExtensions.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using ImageWizard.Core.Middlewares;
2-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.DependencyInjection;
32
using System;
43

54
namespace ImageWizard.AWS
@@ -16,7 +15,7 @@ public static IImageWizardBuilder AddAWS(this IImageWizardBuilder wizardConfigur
1615
wizardConfiguration.Services.Configure(setup);
1716

1817
wizardConfiguration.Services.AddSingleton<AwsLoader>();
19-
wizardConfiguration.ImageLoaderManager.Register<AwsLoader>("aws");
18+
wizardConfiguration.LoaderManager.Register<AwsLoader>("aws");
2019

2120
return wizardConfiguration;
2221
}

src/ImageWizard.AWS/AwsLoader.cs

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
using Amazon.S3;
22
using Amazon.S3.Model;
33
using ImageWizard.Core;
4-
using ImageWizard.Core.ImageLoaders;
5-
using ImageWizard.Core.Types;
6-
using ImageWizard.Services.Types;
4+
using ImageWizard.Loaders;
75
using Microsoft.Extensions.Options;
86
using System;
97
using System.Collections.Generic;
@@ -16,20 +14,14 @@ namespace ImageWizard.AWS
1614
/// <summary>
1715
/// AwsLoader
1816
/// </summary>
19-
public class AwsLoader : DataLoaderBase
17+
public class AwsLoader : DataLoaderBase<AwsOptions>
2018
{
2119
public AwsLoader(IOptions<AwsOptions> options)
20+
: base(options)
2221
{
23-
Options = options.Value;
24-
25-
Client = new AmazonS3Client(Options.AccessKeyId, Options.SecretAccessKey);
22+
Client = new AmazonS3Client(Options.Value.AccessKeyId, Options.Value.SecretAccessKey);
2623
}
2724

28-
/// <summary>
29-
/// Options
30-
/// </summary>
31-
public AwsOptions Options { get; }
32-
3325
/// <summary>
3426
/// Client
3527
/// </summary>
@@ -39,7 +31,7 @@ public override async Task<OriginalData> GetAsync(string source, ICachedData exi
3931
{
4032
GetObjectRequest request = new GetObjectRequest()
4133
{
42-
BucketName = Options.BucketName,
34+
BucketName = Options.Value.BucketName,
4335
Key = source
4436
};
4537

@@ -50,16 +42,14 @@ public override async Task<OriginalData> GetAsync(string source, ICachedData exi
5042

5143
GetObjectResponse result = await Client.GetObjectAsync(request);
5244

53-
if(result.HttpStatusCode == System.Net.HttpStatusCode.NotModified)
45+
if (result.HttpStatusCode == System.Net.HttpStatusCode.NotModified)
5446
{
5547
return null;
5648
}
5749

58-
byte[] data = await result.ResponseStream.ToByteArrayAsync();
59-
6050
return new OriginalData(
6151
result.Headers.ContentType,
62-
await result.ResponseStream.ToByteArrayAsync(),
52+
result.ResponseStream,
6353
new CacheSettings() { ETag = result.ETag.GetTagUnquoted() });
6454
}
6555
}

src/ImageWizard.AWS/AwsOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using ImageWizard.Core.ImageLoaders;
1+
using ImageWizard.Loaders;
22
using System;
33

44
namespace ImageWizard.AWS

src/ImageWizard.Analytics/Extensions.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using ImageWizard.Core.Middlewares;
2-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.DependencyInjection;
32
using System;
43

54
namespace ImageWizard.Analytics

src/ImageWizard.Analytics/ImageRequestAnalytics.cs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using ImageWizard.Core.Middlewares;
2-
using ImageWizard.Core.Types;
3-
using Microsoft.AspNetCore.Http;
1+
using Microsoft.AspNetCore.Http;
42
using System;
53
using System.Collections.Generic;
64
using System.Text;
@@ -22,28 +20,23 @@ public ImageRequestAnalytics(IAnalyticsData analyticsData)
2220
/// </summary>
2321
private IAnalyticsData AnalyticsData { get; }
2422

25-
private object _lock = new object();
23+
private readonly object _lock = new object();
2624

27-
public void OnResponseCompleted(ICachedData cachedImage)
25+
public void OnResponseSending(HttpResponse response, ICachedData cachedImage)
2826
{
2927
lock (_lock)
3028
{
31-
AnalyticsData.TransferedImages++;
32-
//AnalyticsData.TransferedImagesInBytes += cachedImage.Metadata.FileLength.Value;
29+
AnalyticsData.TransferedImages++;
30+
AnalyticsData.TransferedImagesInBytes += cachedImage.Metadata.FileLength ?? 0;
3331
}
3432
}
3533

36-
public void OnResponseSending(HttpResponse response, ICachedData cachedImage)
37-
{
38-
39-
}
40-
4134
public void OnCachedImageCreated(ICachedData cachedImage)
4235
{
4336
lock(_lock)
4437
{
4538
AnalyticsData.CreatedImages++;
46-
//AnalyticsData.CreatedImagesInBytes += cachedImage.Metadata.FileLength.Value;
39+
AnalyticsData.CreatedImagesInBytes += cachedImage.Metadata.FileLength ?? 0;
4740
}
4841
}
4942

src/ImageWizard.Azure/AzureBlobExtensions.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using ImageWizard.Core.Middlewares;
2-
using ImageWizard.ImageLoaders;
3-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.DependencyInjection;
42
using System;
53
using System.Collections.Generic;
64
using System.Text;
@@ -19,7 +17,7 @@ public static IImageWizardBuilder AddAzureBlob(this IImageWizardBuilder wizardCo
1917
wizardConfiguration.Services.Configure(setup);
2018

2119
wizardConfiguration.Services.AddSingleton<AzureBlobLoader>();
22-
wizardConfiguration.ImageLoaderManager.Register<AzureBlobLoader>("azure");
20+
wizardConfiguration.LoaderManager.Register<AzureBlobLoader>("azure");
2321

2422
return wizardConfiguration;
2523
}

src/ImageWizard.Azure/AzureBlobLoader.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
using Azure.Storage.Blobs;
33
using Azure.Storage.Blobs.Models;
44
using ImageWizard;
5-
using ImageWizard.Core;
6-
using ImageWizard.Core.ImageLoaders;
7-
using ImageWizard.Core.Types;
8-
using ImageWizard.Services.Types;
5+
using ImageWizard.Loaders;
96
using Microsoft.Extensions.Options;
107
using System;
118
using System.Collections.Generic;
@@ -18,21 +15,16 @@ namespace ImageWizard.Azure
1815
/// <summary>
1916
/// AzureBlobLoader
2017
/// </summary>
21-
public class AzureBlobLoader : DataLoaderBase
18+
public class AzureBlobLoader : DataLoaderBase<AzureBlobOptions>
2219
{
2320
public AzureBlobLoader(IOptions<AzureBlobOptions> options)
21+
: base(options)
2422
{
25-
Options = options.Value;
26-
2723
Client = new BlobContainerClient(options.Value.ConnectionString, options.Value.ContainerName);
2824
}
2925

30-
private AzureBlobOptions Options { get; }
31-
3226
private BlobContainerClient Client { get; }
3327

34-
public override DataLoaderRefreshMode RefreshMode => Options.RefreshMode;
35-
3628
public override async Task<OriginalData> GetAsync(string source, ICachedData existingCachedImage)
3729
{
3830
BlobClient blob = Client.GetBlobClient(source);
@@ -51,11 +43,9 @@ public override async Task<OriginalData> GetAsync(string source, ICachedData exi
5143
return null;
5244
}
5345

54-
byte[] data = await response.Value.Content.ToByteArrayAsync();
55-
5646
return new OriginalData(
5747
response.Value.ContentType,
58-
await response.Value.Content.ToByteArrayAsync(),
48+
response.Value.Content,
5949
new CacheSettings() { ETag = response.Value.Details.ETag.ToString().GetTagUnquoted() });
6050
}
6151
}

src/ImageWizard.Azure/AzureBlobOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using ImageWizard.Core.ImageLoaders;
1+
using ImageWizard.Loaders;
22
using System;
33

44
namespace ImageWizard.Azure

src/ImageWizard.Client/Builder/BuilderExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using System.Runtime.CompilerServices;
55
using System.Text;
66

7-
namespace ImageWizard.Client.Builder
7+
namespace ImageWizard.Client
88
{
99
static class BuilderExtensions
1010
{

0 commit comments

Comments
 (0)