123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- using AutoMapper;
- using Azure.Storage.Blobs;
- using Azure.Storage.Blobs.Models;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.AspNetCore.StaticFiles;
- using MTWorkHR.Application.Models;
- using MTWorkHR.Application.Services.Interfaces;
- using MTWorkHR.Core.Global;
- using System.IO;
- using System.Net.Http.Headers;
- namespace MTWorkHR.Application.Services
- {
- public class BlobFileService : IFileService
- {
- // private readonly AppSettingsConfiguration settings;
- private const string ContainerName = "blobcontainer";
- public const string SuccessMessageKey = "SuccessMessage";
- public const string ErrorMessageKey = "ErrorMessage";
- private readonly BlobServiceClient _blobServiceClient;
- private readonly BlobContainerClient _containerClient;
- public BlobFileService(BlobServiceClient blobServiceClient)
- {
- _blobServiceClient = blobServiceClient;
- _containerClient = _blobServiceClient.GetBlobContainerClient(ContainerName);
- _containerClient.CreateIfNotExists();
- }
- public async Task<string> UploadFile(IFormFile file)
- {
- try
- {
- var blobClient = _containerClient.GetBlobClient(file.FileName);
- var status = await blobClient.UploadAsync(file.OpenReadStream(), true);
- //if(status.Value == "201")
- return blobClient.Uri.AbsoluteUri;
- }
- catch (Exception ex)
- {
- return "";
- }
- }
- public async Task<string> UploadFileCloud(AttachmentDto file)
- {
- try
- {
- var blobClient = _containerClient.GetBlobClient(file.FileName);
- //var stream = file.FileData.OpenReadStream();
- using (Stream fs = file.FileData.OpenReadStream())
- {
- var status = await blobClient.UploadAsync(fs, true);
- fs.Position = 0;
- using (BinaryReader br = new BinaryReader(fs))
- {
- byte[] bytes = br.ReadBytes((Int32)fs.Length);
- var Headers = file.FileData.Headers;
- file.Content = bytes;
- file.ContentType = file.FileData.ContentType;
- file.FilePath = blobClient.Uri.AbsoluteUri;
- }
- }
- //if(status.Value == "201")
- return blobClient.Uri.AbsoluteUri;
- }
- catch (Exception ex)
- {
- return "";
- }
- }
- public async Task<BlobObject> Download(string url)
- {
- try
- {
- var fileName = new Uri(url).Segments.LastOrDefault();
- var blobClient = _containerClient.GetBlobClient(fileName);
- if(await blobClient.ExistsAsync())
- {
- BlobDownloadResult content = await blobClient.DownloadContentAsync();
- var downloadedData = content.Content.ToStream();
- if (ImageExtensions.Contains(Path.GetExtension(fileName.ToUpperInvariant())))
- {
- var extension = Path.GetExtension(fileName);
- return new BlobObject { Content = downloadedData, ContentType = "image/"+extension.Remove(0,1) };
- }
- else
- {
- return new BlobObject { Content = downloadedData, ContentType = content.Details.ContentType };
- }
- }
- return null;
- }
- catch (Exception ex)
- {
- return null;
- }
- }
- public async Task<List<string>> UploadFiles(List<IFormFile> files)
- {
- List<string> msgs = new List<string>();
- foreach (var formFile in files)
- {
- msgs.Add(await UploadFile(formFile));
- }
- return msgs;
- }
- public async Task<Tuple<bool, string>> UploadFile2(IFormFile file)
- {
- try
- {
- var blobClient = _containerClient.GetBlobClient(file.FileName);
- var status = await blobClient.UploadAsync(file.OpenReadStream(), true);
- return new Tuple<bool, string>(true, "");// = "File uploaded successfully.";
- }
- catch (Exception ex)
- {
- return new Tuple<bool, string>(false, ex.Message);
- }
- }
- public async Task<List<Tuple<bool, string>>> UploadFiles2(List<IFormFile> files)
- {
- List<Tuple<bool, string>> msgs = new List<Tuple<bool, string>>();
- foreach (var formFile in files)
- {
- msgs.Add( await UploadFile2(formFile));
- }
- return msgs;
- }
-
-
- public async Task<bool> Delete(string fileName)
- {
- try
- {
- var blobClient = _containerClient.GetBlobClient(fileName);
- await blobClient.DeleteIfExistsAsync();
- return true;
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- public void CopyFileToCloud(ref List<AttachmentDto> attachments)
- {
- foreach(var attach in attachments)
- {
- if (attach.FileData != null)
- {
- var resPath = UploadFileCloud(attach).Result;
- //if (resPath != "")
- // attach.FilePath = resPath;
- }
-
- }
- }
- public bool CopyFileToActualFolder(string FileName)
- {
- throw new NotImplementedException();
- }
- public bool DeleteFileFromTempFolder(string FileName)
- {
- throw new NotImplementedException();
- }
- public string GetTempAttachmentPath()
- {
- throw new NotImplementedException();
- }
- public string GetActualAttachmentPath()
- {
- throw new NotImplementedException();
- }
- public Task<Tuple<MemoryStream, string, string>> GetFileDownloadInfo(string fileUrl)
- {
- throw new NotImplementedException();
- }
- public Task<bool> CopyFileToActualFolder(List<AttachmentDto> attachments)
- {
- throw new NotImplementedException();
- }
- string[] ImageExtensions = new string[]
- {
- ".JPEG"
- , ".JPG"
- , ".PNG"
-
- };
- }
- }
|