Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Storage.S3: Allow customizing the AmazonS3Config
  • Loading branch information
lilith committed Sep 21, 2020
1 parent d6c344d commit 1c71eb1
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
3 changes: 2 additions & 1 deletion src/Imageflow.Server.Storage.S3/PrefixMapping.cs
@@ -1,11 +1,12 @@
using Amazon;
using Amazon.S3;

namespace Imageflow.Server.Storage.S3
{
internal struct PrefixMapping
{
internal string Prefix;
internal RegionEndpoint Region;
internal AmazonS3Config Config;
internal string Bucket;
internal string BlobPrefix;
internal bool IgnorePrefixCase;
Expand Down
5 changes: 3 additions & 2 deletions src/Imageflow.Server.Storage.S3/S3Service.cs
Expand Up @@ -66,8 +66,9 @@ public async Task<IBlobData> Fetch(string virtualPath)
? partialKey
: mapping.BlobPrefix + "/" + partialKey;

try {
using var client = new AmazonS3Client(credentials, mapping.Region);
try
{
using var client = new AmazonS3Client(credentials, mapping.Config);
var req = new Amazon.S3.Model.GetObjectRequest() { BucketName = mapping.Bucket, Key = key };

var s = await client.GetObjectAsync(req);
Expand Down
24 changes: 22 additions & 2 deletions src/Imageflow.Server.Storage.S3/S3ServiceOptions.cs
Expand Up @@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Linq;
using Amazon;
using Amazon.S3;

namespace Imageflow.Server.Storage.S3
{
Expand All @@ -26,7 +27,26 @@ public S3ServiceOptions MapPrefix(string prefix, RegionEndpoint region, string b
=> MapPrefix(prefix, region, bucket, "", ignorePrefixCase, lowercaseBlobPath);
public S3ServiceOptions MapPrefix(string prefix, RegionEndpoint region, string bucket, string blobPrefix)
=> MapPrefix(prefix, region, bucket, blobPrefix, false, false);
public S3ServiceOptions MapPrefix(string prefix, RegionEndpoint region, string bucket, string blobPrefix, bool ignorePrefixCase, bool lowercaseBlobPath)

public S3ServiceOptions MapPrefix(string prefix, RegionEndpoint region, string bucket, string blobPrefix,
bool ignorePrefixCase, bool lowercaseBlobPath)
=> MapPrefix(prefix, new AmazonS3Config() {RegionEndpoint = region}, bucket,
blobPrefix, ignorePrefixCase, lowercaseBlobPath);

/// <summary>
/// Maps a given prefix to a specified location within a bucket
/// </summary>
/// <param name="prefix">The prefix to capture image requests within</param>
/// <param name="s3Config">The configuration (such as region endpoint or service URL, etc) to use</param>
/// <param name="bucket">The bucket to serve images from</param>
/// <param name="blobPrefix">The path within the bucket to serve images from. Can be an empty string to serve
/// from root of bucket.</param>
/// <param name="ignorePrefixCase">Whether to be cases sensitive about requests matching 'prefix'</param>
/// <param name="lowercaseBlobPath">Whether to lowercase all incoming paths to allow for case insensitivity
/// (requires that actual blobs all be lowercase).</param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
public S3ServiceOptions MapPrefix(string prefix, AmazonS3Config s3Config, string bucket, string blobPrefix, bool ignorePrefixCase, bool lowercaseBlobPath)
{
prefix = prefix.TrimStart('/').TrimEnd('/');
if (prefix.Length == 0)
Expand All @@ -41,7 +61,7 @@ public S3ServiceOptions MapPrefix(string prefix, RegionEndpoint region, string b
{
Bucket=bucket,
Prefix=prefix,
Region=region,
Config=s3Config,
BlobPrefix = blobPrefix,
IgnorePrefixCase = ignorePrefixCase,
LowercaseBlobPath = lowercaseBlobPath
Expand Down

0 comments on commit 1c71eb1

Please sign in to comment.