-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAzureStorage.cs
More file actions
58 lines (53 loc) · 2.4 KB
/
AzureStorage.cs
File metadata and controls
58 lines (53 loc) · 2.4 KB
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
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using ECommerceAPI.Application.Abstractions.Storage.Azure;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ECommerceAPI.Infrastructure.Services.Storage.Azure
{
public class AzureStorage : Storage, IAzureStorage
{
readonly BlobServiceClient _blobServiceClient;
BlobContainerClient _blobContainerClient;
public AzureStorage(IConfiguration configuration)
{
_blobServiceClient = new(configuration["Storage:Azure"]);
}
public async Task DeleteAsync(string containerName, string fileName)
{
_blobContainerClient = _blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blobClient = _blobContainerClient.GetBlobClient(fileName);
await blobClient.DeleteAsync();
}
public List<string> GetFiles(string containerName)
{
_blobContainerClient = _blobServiceClient.GetBlobContainerClient(containerName);
return _blobContainerClient.GetBlobs().Select(b => b.Name).ToList();
}
public bool HasFile(string containerName, string fileName)
{
_blobContainerClient = _blobServiceClient.GetBlobContainerClient(containerName);
return _blobContainerClient.GetBlobs().Any(b => b.Name == fileName);
}
public async Task<List<(string fileName, string pathOrContainerName)>> UploadAsync(string containerName, IFormFileCollection files)
{
_blobContainerClient = _blobServiceClient.GetBlobContainerClient(containerName);
await _blobContainerClient.CreateIfNotExistsAsync();
await _blobContainerClient.SetAccessPolicyAsync(PublicAccessType.BlobContainer);
List<(string fileName, string pathOrContainerName)> data = new();
foreach (IFormFile file in files)
{
string newFileName = await FileRenameAsync(containerName, file.Name, GetFiles, HasFile);
BlobClient blobClient = _blobContainerClient.GetBlobClient(newFileName);
await blobClient.UploadAsync(file.OpenReadStream());
data.Add((newFileName, $"{containerName}/{newFileName}"));
}
return data;
}
}
}