250 lines
9.2 KiB
C#
250 lines
9.2 KiB
C#
|
|
using Amazon.S3.Model;
|
|||
|
|
using Microsoft.AspNetCore.Http;
|
|||
|
|
using OnlineAssessment.Helpers;
|
|||
|
|
using OnlineAssessment.Models;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
|
|||
|
|
namespace OnlineAssessment.Services
|
|||
|
|
{
|
|||
|
|
public interface IAWSS3FileService
|
|||
|
|
{
|
|||
|
|
Task<bool> UploadFile(string uploadFileName);
|
|||
|
|
//Task<bool> UploadProfileImage(int institute_id, int user_id, string uploadFileName);
|
|||
|
|
Task<Object> UploadProfileImage(int institute_id, int user_id, IFormFile file);
|
|||
|
|
Task<Object> UploadExamImage(int institute_id, int user_id, int exam_id, IFormFile file);
|
|||
|
|
Task<Object> UploadPracticeImage(int institute_id, int user_id, int practice_id, IFormFile file);
|
|||
|
|
|
|||
|
|
Task<List<FilePathWithMeta>> FilesList();
|
|||
|
|
Task<Stream> GetFile(int institute_id, int user_id, string folder, string key);
|
|||
|
|
Task<bool> UpdateFile(UploadFileName uploadFileName, string key);
|
|||
|
|
Task<bool> DeleteFile(string key);
|
|||
|
|
Task<bool> DeleteProfileImage(int institute_id, int user_id);
|
|||
|
|
}
|
|||
|
|
public class AWSS3FileService : IAWSS3FileService
|
|||
|
|
{
|
|||
|
|
private readonly IAWSS3BucketHelper _AWSS3BucketHelper;
|
|||
|
|
|
|||
|
|
public AWSS3FileService(IAWSS3BucketHelper AWSS3BucketHelper)
|
|||
|
|
{
|
|||
|
|
this._AWSS3BucketHelper = AWSS3BucketHelper;
|
|||
|
|
}
|
|||
|
|
public async Task<bool> UploadFile(string uploadFileName)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var path = Path.Combine(uploadFileName.ToString());
|
|||
|
|
using (FileStream fsSource = new FileStream(path, FileMode.Open, FileAccess.Read))
|
|||
|
|
{
|
|||
|
|
string fileExtension = Path.GetExtension(path);
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
fileName = $"{DateTime.Now.Ticks}{fileExtension}";
|
|||
|
|
return await _AWSS3BucketHelper.UploadFile(fsSource, path);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/*
|
|||
|
|
public async Task<bool> UploadProfileImage(int institute_id, int user_id, string uploadFileName)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var path = Path.Combine(uploadFileName.ToString());
|
|||
|
|
using (FileStream fsSource = new FileStream(path, FileMode.Open, FileAccess.Read))
|
|||
|
|
{
|
|||
|
|
string fileExtension = Path.GetExtension(path);
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
string folder = "/user-photo/";
|
|||
|
|
fileName = $"{institute_id.ToString()}{folder}{user_id.ToString()}{fileExtension}";
|
|||
|
|
return await _AWSS3BucketHelper.UploadFile(fsSource, fileName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
public async Task<Object> UploadProfileImage(int institute_id, int user_id, IFormFile file)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
IList<string> AllowedFileExtensions = new List<string> { ".png", ".jpg" };
|
|||
|
|
string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower();
|
|||
|
|
if (!AllowedFileExtensions.Contains(fileExtension))
|
|||
|
|
{
|
|||
|
|
var message = string.Format("Please Upload image of type .png or .jpg");
|
|||
|
|
return message;
|
|||
|
|
}
|
|||
|
|
fileExtension = ".png";
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
string folder = "/user-photo/";
|
|||
|
|
fileName = $"{institute_id.ToString()}{folder}{user_id.ToString()}{fileExtension}";
|
|||
|
|
return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<Object> UploadExamImage(int institute_id, int user_id, int exam_id, IFormFile file)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
IList<string> AllowedFileExtensions = new List<string> { ".png" };
|
|||
|
|
string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower();
|
|||
|
|
if (!AllowedFileExtensions.Contains(fileExtension))
|
|||
|
|
{
|
|||
|
|
var message = string.Format("Please Upload image of type .png.");
|
|||
|
|
return message;
|
|||
|
|
}
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
string folder = "/exams/";
|
|||
|
|
fileName = $"{institute_id.ToString()}{folder}{exam_id.ToString()}{fileExtension}";
|
|||
|
|
return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<Object> UploadPracticeImage(int institute_id, int user_id, int practice_id, IFormFile file)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
IList<string> AllowedFileExtensions = new List<string> { ".png" };
|
|||
|
|
string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower();
|
|||
|
|
if (!AllowedFileExtensions.Contains(fileExtension))
|
|||
|
|
{
|
|||
|
|
var message = string.Format("Please Upload image of type .png.");
|
|||
|
|
return message;
|
|||
|
|
}
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
string folder = "/practices/";
|
|||
|
|
fileName = $"{institute_id.ToString()}{folder}{practice_id.ToString()}{fileExtension}";
|
|||
|
|
return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<List<FilePathWithMeta>> FilesList()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
GetObjectMetadataResponse meta = new GetObjectMetadataResponse();
|
|||
|
|
KeyValue kv = new KeyValue();
|
|||
|
|
List<KeyValue> lkv = new List<KeyValue>();
|
|||
|
|
FilePathWithMeta metaFile = new FilePathWithMeta();
|
|||
|
|
List<FilePathWithMeta> listMetaFile = new List<FilePathWithMeta>();
|
|||
|
|
|
|||
|
|
ListVersionsResponse listVersions = await _AWSS3BucketHelper.FilesList();
|
|||
|
|
List<string> filenamelist = listVersions.Versions.Select(c => c.Key).ToList();
|
|||
|
|
filenamelist = filenamelist.Where(r => r.EndsWith("png")).ToList();
|
|||
|
|
|
|||
|
|
foreach(string name in filenamelist)
|
|||
|
|
{
|
|||
|
|
meta = await _AWSS3BucketHelper.MetaDetail(name);
|
|||
|
|
foreach (string key in meta.Metadata.Keys)
|
|||
|
|
{
|
|||
|
|
kv.key = key;
|
|||
|
|
kv.value = meta.Metadata[key];
|
|||
|
|
lkv.Add(kv);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
metaFile.file_path = name;
|
|||
|
|
metaFile.listmetadata = lkv;
|
|||
|
|
listMetaFile.Add(metaFile);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return listMetaFile;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public async Task<Stream> GetFile(int institute_id, int user_id, string folder, string key)
|
|||
|
|
{
|
|||
|
|
//string fileExtension = ".png";
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
fileName = $"{institute_id.ToString()}{folder}{key.ToString()}";
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
Stream fileStream = await _AWSS3BucketHelper.GetFile(fileName);
|
|||
|
|
if (fileStream == null)
|
|||
|
|
{
|
|||
|
|
Exception ex = new Exception("File Not Found");
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return fileStream;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public async Task<bool> UpdateFile(UploadFileName uploadFileName, string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var path = Path.Combine("Files", uploadFileName.ToString() + ".png");
|
|||
|
|
using (FileStream fsSource = new FileStream(path, FileMode.Open, FileAccess.Read))
|
|||
|
|
{
|
|||
|
|
return await _AWSS3BucketHelper.UploadFile(fsSource, key);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<bool> DeleteProfileImage(int institute_id, int user_id)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
string fileExtension = ".png";
|
|||
|
|
string fileName = string.Empty;
|
|||
|
|
string folder = "/user-photo/";
|
|||
|
|
fileName = $"{institute_id.ToString()}{folder}{user_id.ToString()}{fileExtension}";
|
|||
|
|
|
|||
|
|
return await _AWSS3BucketHelper.DeleteFile(fileName);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<bool> DeleteFile(string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
return await _AWSS3BucketHelper.DeleteFile(key);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw ex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|