Images upload for Questions

This commit is contained in:
preetparida1 2025-11-03 11:24:39 +05:30
parent 0e4059936a
commit 14b3b2ddae
3 changed files with 56 additions and 12 deletions

View File

@ -98,6 +98,17 @@ namespace OnlineAssessment.Controllers
return Ok(new { isSucess = result }); return Ok(new { isSucess = result });
} }
[Route("uploadQuestionImage")]
[HttpPost]
[Authorize(Roles = "Admin,Teacher")]
public async Task<IActionResult> UploadQuestionImageAsync(int practice_id, IFormFile file)
{
int institute_id = int.Parse(Security.GetValueFromToken("InstituteId", HttpContext.User.Identity as ClaimsIdentity));
int user_id = Security.GetIdFromJwtToken(UserClaim.UserId, HttpContext.User.Identity as ClaimsIdentity);
var result = await _AWSS3FileService.UploadQuestionImage(institute_id, file);
return Ok(new { isSucess = result });
}
[Route("filesList")] [Route("filesList")]
[HttpGet] [HttpGet]
[Authorize(Roles = "Admin,Teacher")] [Authorize(Roles = "Admin,Teacher")]

View File

@ -11,7 +11,7 @@ namespace OnlineAssessment.Helpers
{ {
public interface IAWSS3BucketHelper public interface IAWSS3BucketHelper
{ {
Task<bool> UploadFile(System.IO.Stream inputStream, string fileName); Task<string> UploadFile(System.IO.Stream inputStream, string fileName);
Task<bool> UploadFileWithMeta(System.IO.Stream inputStream, string fileName, string meta); Task<bool> UploadFileWithMeta(System.IO.Stream inputStream, string fileName, string meta);
Task<ListVersionsResponse> FilesList(); Task<ListVersionsResponse> FilesList();
Task<Stream> GetFile(string key); Task<Stream> GetFile(string key);
@ -27,7 +27,7 @@ namespace OnlineAssessment.Helpers
this._amazonS3 = s3Client; this._amazonS3 = s3Client;
this._settings = settings.Value; this._settings = settings.Value;
} }
public async Task<bool> UploadFile(System.IO.Stream inputStream, string fileName) public async Task<string> UploadFile(System.IO.Stream inputStream, string fileName)
{ {
try try
{ {
@ -39,9 +39,9 @@ namespace OnlineAssessment.Helpers
}; };
PutObjectResponse response = await _amazonS3.PutObjectAsync(request); PutObjectResponse response = await _amazonS3.PutObjectAsync(request);
if (response.HttpStatusCode == System.Net.HttpStatusCode.OK) if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
return true; return $"https://{_settings.AWSS3.BucketName}.s3.{_settings.AWSS3.Region}.amazonaws.com/{fileName}";
else else
return false; return null;
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -12,15 +12,16 @@ namespace OnlineAssessment.Services
{ {
public interface IAWSS3FileService public interface IAWSS3FileService
{ {
Task<bool> UploadFile(string uploadFileName); Task<string> UploadFile(string uploadFileName);
//Task<bool> UploadProfileImage(int institute_id, int user_id, 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> 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> 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<Object> UploadPracticeImage(int institute_id, int user_id, int practice_id, IFormFile file);
Task<Object> UploadQuestionImage(int institute_id, IFormFile file);
Task<List<FilePathWithMeta>> FilesList(); Task<List<FilePathWithMeta>> FilesList();
Task<Stream> GetFile(int institute_id, int user_id, string folder, string key); Task<Stream> GetFile(int institute_id, int user_id, string folder, string key);
Task<bool> UpdateFile(UploadFileName uploadFileName, string key); Task<string> UpdateFile(UploadFileName uploadFileName, string key);
Task<bool> DeleteFile(string key); Task<bool> DeleteFile(string key);
Task<bool> DeleteProfileImage(int institute_id, int user_id); Task<bool> DeleteProfileImage(int institute_id, int user_id);
} }
@ -32,7 +33,7 @@ namespace OnlineAssessment.Services
{ {
this._AWSS3BucketHelper = AWSS3BucketHelper; this._AWSS3BucketHelper = AWSS3BucketHelper;
} }
public async Task<bool> UploadFile(string uploadFileName) public async Task<string> UploadFile(string uploadFileName)
{ {
try try
{ {
@ -76,7 +77,7 @@ namespace OnlineAssessment.Services
{ {
try try
{ {
IList<string> AllowedFileExtensions = new List<string> { ".png", ".jpg" }; IList<string> AllowedFileExtensions = new List<string> { ".png", ".jpg", ".jpeg" };
string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower(); string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower();
if (!AllowedFileExtensions.Contains(fileExtension)) if (!AllowedFileExtensions.Contains(fileExtension))
{ {
@ -100,15 +101,16 @@ namespace OnlineAssessment.Services
{ {
try try
{ {
IList<string> AllowedFileExtensions = new List<string> { ".png" }; IList<string> AllowedFileExtensions = new List<string> { ".png", ".jpg", ".jpeg" };
string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower(); string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower();
if (!AllowedFileExtensions.Contains(fileExtension)) if (!AllowedFileExtensions.Contains(fileExtension))
{ {
var message = string.Format("Please Upload image of type .png."); var message = string.Format("Please Upload image of type .png., jpg, jpeg");
return message; return message;
} }
string fileName = string.Empty; string fileName = string.Empty;
string folder = "/exams/"; string folder = "/exams/";
fileExtension = ".png";
fileName = $"{institute_id.ToString()}{folder}{exam_id.ToString()}{fileExtension}"; fileName = $"{institute_id.ToString()}{folder}{exam_id.ToString()}{fileExtension}";
return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName); return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName);
} }
@ -122,7 +124,7 @@ namespace OnlineAssessment.Services
{ {
try try
{ {
IList<string> AllowedFileExtensions = new List<string> { ".png" }; IList<string> AllowedFileExtensions = new List<string> { ".png", ".jpg", ".jpeg" };
string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower(); string fileExtension = Path.GetExtension(file.FileName.ToString()).ToLower();
if (!AllowedFileExtensions.Contains(fileExtension)) if (!AllowedFileExtensions.Contains(fileExtension))
{ {
@ -131,6 +133,7 @@ namespace OnlineAssessment.Services
} }
string fileName = string.Empty; string fileName = string.Empty;
string folder = "/practices/"; string folder = "/practices/";
fileExtension = ".png";
fileName = $"{institute_id.ToString()}{folder}{practice_id.ToString()}{fileExtension}"; fileName = $"{institute_id.ToString()}{folder}{practice_id.ToString()}{fileExtension}";
return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName); return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), fileName);
} }
@ -140,6 +143,36 @@ namespace OnlineAssessment.Services
} }
} }
public async Task<Object> UploadQuestionImage(int institute_id, IFormFile file)
{
try
{
// Allowed file types
IList<string> AllowedFileExtensions = new List<string> { ".png", ".jpg", ".jpeg" };
string fileExtension = Path.GetExtension(file.FileName).ToLower();
if (!AllowedFileExtensions.Contains(fileExtension))
{
throw new Exception("Please upload an image of type .png, .jpg, or .jpeg");
}
string folder = "/questions/";
fileExtension = ".png";
// Create a unique file name (so older uploads don't get overwritten)
string uniqueFileName = $"{institute_id}/{folder}/{Guid.NewGuid()}{fileExtension}";
// Upload file to S3
return await _AWSS3BucketHelper.UploadFile(file.OpenReadStream(), uniqueFileName);
}
catch (Exception ex)
{
throw new Exception($"Image upload failed: {ex.Message}");
}
}
public async Task<List<FilePathWithMeta>> FilesList() public async Task<List<FilePathWithMeta>> FilesList()
{ {
try try
@ -202,7 +235,7 @@ namespace OnlineAssessment.Services
throw ex; throw ex;
} }
} }
public async Task<bool> UpdateFile(UploadFileName uploadFileName, string key) public async Task<string> UpdateFile(UploadFileName uploadFileName, string key)
{ {
try try
{ {