64 lines
1.7 KiB
C#
64 lines
1.7 KiB
C#
using Amazon.S3;
|
|
using UGQDataAccess.Settings;
|
|
using Microsoft.Extensions.Options;
|
|
using Amazon.S3.Transfer;
|
|
using Amazon.S3.Model;
|
|
using Microsoft.AspNetCore.DataProtection.KeyManagement;
|
|
|
|
namespace UGQApiServer.Storage;
|
|
|
|
public class S3StorageService : IStorageService
|
|
{
|
|
readonly AmazonS3Client _s3Client;
|
|
readonly S3Settings _settings;
|
|
|
|
public S3StorageService(IOptions<S3Settings> settings)
|
|
{
|
|
_settings = settings.Value;
|
|
_s3Client = new AmazonS3Client(_settings.AccessKey, _settings.SecretAccessKey, Amazon.RegionEndpoint.USEast1);
|
|
}
|
|
|
|
public string fileUrl(string filename)
|
|
{
|
|
if (string.IsNullOrEmpty(filename) == true)
|
|
return string.Empty;
|
|
|
|
return $"{_settings.DownloadUrl}/{_settings.RootFolder}/{filename}";
|
|
}
|
|
|
|
public async Task<bool> uploadFile(string filename, IFormFile file)
|
|
{
|
|
using (var newMemoryStream = new MemoryStream())
|
|
{
|
|
file.CopyTo(newMemoryStream);
|
|
|
|
var uploadRequest = new TransferUtilityUploadRequest
|
|
{
|
|
InputStream = newMemoryStream,
|
|
Key = $"{_settings.RootFolder}/{filename}",
|
|
BucketName = _settings.BucketName,
|
|
};
|
|
|
|
var fileTransferUtility = new TransferUtility(_s3Client);
|
|
await fileTransferUtility.UploadAsync(uploadRequest);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public async Task<bool> deleteFile(string filename)
|
|
{
|
|
var deleteObjectRequest = new DeleteObjectRequest
|
|
{
|
|
BucketName = _settings.BucketName,
|
|
Key = $"{_settings.RootFolder}/{filename}",
|
|
};
|
|
|
|
await _s3Client.DeleteObjectAsync(deleteObjectRequest);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|