-
Notifications
You must be signed in to change notification settings - Fork 12
/
AzureBlobStorageManager.cs
73 lines (60 loc) · 2.65 KB
/
AzureBlobStorageManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace DddDotNet.Infrastructure.Storages.Azure;
public class AzureBlobStorageManager : IFileStorageManager
{
private readonly AzureBlobOption _option;
private readonly BlobContainerClient _container;
public AzureBlobStorageManager(AzureBlobOption option)
{
_option = option;
_container = new BlobContainerClient(_option.ConnectionString, _option.Container);
}
private string GetBlobName(IFileEntry fileEntry)
{
return _option.Path + fileEntry.FileLocation;
}
public async Task CreateAsync(IFileEntry fileEntry, Stream stream, CancellationToken cancellationToken = default)
{
await _container.CreateIfNotExistsAsync(cancellationToken: cancellationToken);
BlobClient blob = _container.GetBlobClient(GetBlobName(fileEntry));
await blob.UploadAsync(stream, overwrite: true, cancellationToken);
}
public async Task DeleteAsync(IFileEntry fileEntry, CancellationToken cancellationToken = default)
{
BlobClient blob = _container.GetBlobClient(GetBlobName(fileEntry));
await blob.DeleteAsync(cancellationToken: cancellationToken);
}
public async Task<byte[]> ReadAsync(IFileEntry fileEntry, CancellationToken cancellationToken = default)
{
using var stream = new MemoryStream();
await DownloadAsync(fileEntry, stream, cancellationToken);
return stream.ToArray();
}
public async Task DownloadAsync(IFileEntry fileEntry, string path, CancellationToken cancellationToken = default)
{
BlobClient blob = _container.GetBlobClient(GetBlobName(fileEntry));
await blob.DownloadToAsync(path, cancellationToken);
}
public async Task DownloadAsync(IFileEntry fileEntry, Stream stream, CancellationToken cancellationToken = default)
{
BlobClient blob = _container.GetBlobClient(GetBlobName(fileEntry));
await blob.DownloadToAsync(stream, cancellationToken);
}
public async Task ArchiveAsync(IFileEntry fileEntry, CancellationToken cancellationToken = default)
{
BlobClient blob = _container.GetBlobClient(GetBlobName(fileEntry));
await blob.SetAccessTierAsync(AccessTier.Cool, cancellationToken: cancellationToken);
}
public async Task UnArchiveAsync(IFileEntry fileEntry, CancellationToken cancellationToken = default)
{
BlobClient blob = _container.GetBlobClient(GetBlobName(fileEntry));
await blob.SetAccessTierAsync(AccessTier.Hot, cancellationToken: cancellationToken);
}
public void Dispose()
{
}
}