forked from MDCPS/DamageAssessment_Backend
conflict resolution
This commit is contained in:
@ -136,6 +136,80 @@ namespace DamageAssesment.Api.Attachments.Controllers
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// download an existing attachment.
|
||||
/// </summary>
|
||||
[HttpGet("attachments/download/{id}")]
|
||||
public async Task<IActionResult> downloadfile(int id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = await this.AttachmentProvider.GetDownloadAttachmentAsync(id);
|
||||
if (!result.IsSuccess)
|
||||
return NotFound();
|
||||
string path = await UploadService.GetFile(result.Attachment.URI);
|
||||
if (path == null)
|
||||
return NotFound();
|
||||
var contentType = GetContentType(result.Attachment.FileName);
|
||||
if (contentType == "application/octet-stream")
|
||||
return PhysicalFile(path, contentType, result.Attachment.FileName);
|
||||
return PhysicalFile(path, contentType, enableRangeProcessing: true);// result.Attachment.FileName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle the exception here or log it
|
||||
return StatusCode(500, "An error occurred: " + ex.Message);
|
||||
}
|
||||
//try
|
||||
//{
|
||||
// var result = await this.AttachmentProvider.GetDownloadAttachmentAsync(id);
|
||||
// if(!result.IsSuccess)
|
||||
// return NotFound();
|
||||
// byte[] fileContent = await UploadService.DownloadFile(result.Attachment.URI);
|
||||
// if (fileContent == null || fileContent.Length == 0)
|
||||
// return NotFound();
|
||||
// var contentType = "application/octet-stream";
|
||||
// return File(fileContent, contentType, result.Attachment.FileName);
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// // Handle the exception here or log it
|
||||
// return StatusCode(500, "An error occurred: " + ex.Message);
|
||||
//}
|
||||
}
|
||||
private string GetContentType(string fileName)
|
||||
{
|
||||
// You can add more content types based on the file extensions
|
||||
switch (Path.GetExtension(fileName).ToLower())
|
||||
{
|
||||
//case ".txt":
|
||||
// return "text/plain";
|
||||
case ".jpg":
|
||||
case ".jpeg":
|
||||
return "image/jpeg";
|
||||
case ".png":
|
||||
return "image/png";
|
||||
case ".gif":
|
||||
return "image/gif";
|
||||
case ".bmp":
|
||||
return "image/bmp";
|
||||
case ".webp":
|
||||
return "image/webp";
|
||||
case ".csv":
|
||||
return "text/csv";
|
||||
case ".pdf":
|
||||
return "application/pdf";
|
||||
case ".docx":
|
||||
case ".doc":
|
||||
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
||||
case ".xlsx":
|
||||
case ".xls":
|
||||
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||
// Add more cases as needed
|
||||
default:
|
||||
return "application/octet-stream";
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Delete an existing attachment.
|
||||
/// </summary>
|
||||
[HttpDelete("attachments/{id}")]
|
||||
|
@ -9,6 +9,7 @@ namespace DamageAssesment.Api.Attachments.Interfaces
|
||||
Task<(bool IsSuccess, IEnumerable<Models.Attachment> Attachments, string ErrorMessage)> PostAttachmentAsync(List<Models.Attachment> Attachments);
|
||||
Task<(bool IsSuccess, IEnumerable<Models.Attachment> Attachments, string ErrorMessage)> PutAttachmentAsync(List<Models.Attachment> Attachments);
|
||||
Task<(bool IsSuccess, Models.Attachment Attachment, string Path)> DeleteAttachmentAsync(int Id);
|
||||
Task<(bool IsSuccess, Models.Attachment Attachment, string Path)> GetDownloadAttachmentAsync(int Id);
|
||||
Task<(bool IsSuccess, int counter, string Path)> DeleteAttachmentsAsync(int responseId, int answerId);
|
||||
Task<(bool IsSuccess, int counter, string Path)> DeleteBulkAttachmentsAsync(int responseId, List<int> answerIds);
|
||||
Task<(bool IsSuccess, int counter, string message)> GetAttachmentCounter();
|
||||
|
@ -7,6 +7,8 @@ namespace DamageAssesment.Api.Attachments.Interfaces
|
||||
List<Models.Attachment> UploadAttachment(int responseId,int answerId, int counter, List<IFormFile> postedFile);
|
||||
List<Models.Attachment> UploadAttachment(int responseId, int counter, List<AnswerInfo> answers);
|
||||
public List<Models.Attachment> UpdateAttachments(int responseId, List<AnswerInfo> answers, IEnumerable<Models.Attachment> attachments);
|
||||
Task<byte[]> DownloadFile(string path);
|
||||
Task<string> GetFile(string path);
|
||||
void Deletefile(string path);
|
||||
void Movefile(string path);
|
||||
}
|
||||
|
@ -8,12 +8,18 @@ using System.Reflection;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// CORS setup to allow requests from any origin.
|
||||
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
|
||||
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
|
||||
}));
|
||||
|
||||
// Add services to the container.
|
||||
|
||||
builder.Services.AddControllers();
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
//builder.Services.AddSwaggerGen();
|
||||
// Add Swagger/OpenAPI documentation support.
|
||||
builder.Services.AddSwaggerGen(c =>
|
||||
{
|
||||
// Include XML comments from your assembly
|
||||
@ -21,6 +27,7 @@ builder.Services.AddSwaggerGen(c =>
|
||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||
c.IncludeXmlComments(xmlPath);
|
||||
});
|
||||
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||
builder.Services.AddScoped<IAttachmentsProvider, AttachmentsProvider>();
|
||||
builder.Services.AddScoped<IUploadService, UploadService>();
|
||||
builder.Services.AddScoped<IAzureBlobService,AzureBlobService>();
|
||||
@ -47,6 +54,11 @@ if (app.Environment.IsDevelopment())
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
// Enable CORS, authentication, and authorization middleware.
|
||||
>>>>>>> 9ec9b8b96fc7c5767fcddf1e4e52bde203fcf619
|
||||
app.UseCors("DamageAppCorsPolicy");
|
||||
app.UseAuthorization();
|
||||
app.UseHttpsRedirection();
|
||||
|
@ -13,25 +13,33 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
private AttachmentsDbContext AttachmentDbContext;
|
||||
private ILogger<AttachmentsProvider> logger;
|
||||
private IUploadService uploadservice;
|
||||
private IMapper mapper;
|
||||
|
||||
public AttachmentsProvider(AttachmentsDbContext AttachmentDbContext, ILogger<AttachmentsProvider> logger, IMapper mapper,IUploadService uploadservice)
|
||||
private IMapper mapper;
|
||||
private readonly IHttpContextAccessor httpContextAccessor;
|
||||
private string baseUrl;
|
||||
public AttachmentsProvider(AttachmentsDbContext AttachmentDbContext, ILogger<AttachmentsProvider> logger, IMapper mapper,IUploadService uploadservice, IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
this.AttachmentDbContext = AttachmentDbContext;
|
||||
this.logger = logger;
|
||||
this.mapper = mapper;
|
||||
this.uploadservice = uploadservice;
|
||||
this.httpContextAccessor = httpContextAccessor;
|
||||
baseUrl = $"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host}";
|
||||
baseUrl = baseUrl + "/attachments/download";
|
||||
//SeedData();
|
||||
}
|
||||
public async Task<(bool IsSuccess, IEnumerable<Models.Attachment> Attachments, string ErrorMessage)> GetAttachmentsAsync()
|
||||
{
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
logger?.LogInformation("Query Question");
|
||||
var Attachment = await AttachmentDbContext.Attachments.AsNoTracking().Where(a => !a.IsDeleted).ToListAsync();
|
||||
if (Attachment != null)
|
||||
{
|
||||
foreach (var attachment in Attachment)
|
||||
{
|
||||
attachment.URI = $"{baseUrl}/{attachment.Id}";
|
||||
}
|
||||
logger?.LogInformation($"{Attachment.Count} Attachments(s) found");
|
||||
var result = mapper.Map<IEnumerable<Db.Attachment>, IEnumerable<Models.Attachment>>(Attachment);
|
||||
return (true, result, null);
|
||||
@ -54,6 +62,7 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
if (Attachment != null)
|
||||
{
|
||||
logger?.LogInformation($"{Attachment} customer(s) found");
|
||||
Attachment.URI = $"{baseUrl}/{Attachment.Id}";
|
||||
var result = mapper.Map<Db.Attachment, Models.Attachment>(Attachment);
|
||||
return (true, result, null);
|
||||
}
|
||||
@ -73,6 +82,10 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
List<Db.Attachment> attachments = mapper.Map<List<Models.Attachment>, List<Db.Attachment>>(Attachments);
|
||||
AttachmentDbContext.Attachments.AddRange(attachments);
|
||||
await AttachmentDbContext.SaveChangesAsync();
|
||||
foreach (var attachment in attachments)
|
||||
{
|
||||
attachment.URI = $"{baseUrl}/{attachment.Id}";
|
||||
}
|
||||
var result = mapper.Map<IEnumerable<Db.Attachment>, IEnumerable<Models.Attachment>>(attachments);
|
||||
return (true, result, null);
|
||||
}
|
||||
@ -91,6 +104,10 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
List<Db.Attachment> attachments = mapper.Map<List<Models.Attachment>, List<Db.Attachment>>(Attachments);
|
||||
AttachmentDbContext.Attachments.UpdateRange(attachments);
|
||||
await AttachmentDbContext.SaveChangesAsync();
|
||||
foreach (var attachment in attachments)
|
||||
{
|
||||
attachment.URI = $"{baseUrl}/{attachment.Id}";
|
||||
}
|
||||
var result = mapper.Map<IEnumerable<Db.Attachment>, IEnumerable<Models.Attachment>>(attachments);
|
||||
return (true, result, null);
|
||||
}
|
||||
@ -197,6 +214,24 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
{
|
||||
return AttachmentDbContext.Attachments.AsNoTracking().Count(e => e.Id == id && !e.IsDeleted) > 0;
|
||||
}
|
||||
public async Task<(bool IsSuccess, Models.Attachment Attachment, string Path)> GetDownloadAttachmentAsync(int Id)
|
||||
{
|
||||
try
|
||||
{
|
||||
Db.Attachment Attachment = AttachmentDbContext.Attachments.Where(a => a.Id == Id).AsNoTracking().FirstOrDefault();
|
||||
if (Attachment == null)
|
||||
{
|
||||
return (false, null, "Not Found");
|
||||
}
|
||||
return (true, mapper.Map<Db.Attachment, Models.Attachment>(Attachment), $"Attachment {Id}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
logger?.LogError(ex.ToString());
|
||||
return (false, null, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void SeedData()
|
||||
{
|
||||
|
@ -24,6 +24,41 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
uploadpath = configuration.GetValue<string>("Fileupload:folderpath");
|
||||
Deletepath = configuration.GetValue<string>("Fileupload:Deletepath");
|
||||
}
|
||||
public async Task<string> GetFile(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (System.IO.File.Exists(path))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
|
||||
return null; // File not found
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception as needed
|
||||
throw;
|
||||
}
|
||||
|
||||
}
|
||||
public async Task<byte[]> DownloadFile(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (System.IO.File.Exists(path))
|
||||
{
|
||||
return await System.IO.File.ReadAllBytesAsync(path);
|
||||
}
|
||||
|
||||
return null; // File not found
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception as needed
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public List<Models.Attachment> UploadAttachment(int responseId,int answerId,int counter, List<IFormFile> postedFile)
|
||||
{
|
||||
var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), uploadpath);
|
||||
@ -89,7 +124,7 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
{
|
||||
counter++;
|
||||
|
||||
var UserfileName = Path.GetFileName(file.FileName);
|
||||
var UserfileName = Path.GetFileName(file.FileName+ file.FileExtension);
|
||||
var fileName = String.Format("Attachment_{0}{1}", counter, file.FileExtension);
|
||||
var dbPath = Path.Combine(fullDirectoryPath, fileName);
|
||||
File.WriteAllBytes(dbPath, Convert.FromBase64String(file.FileContent));
|
||||
@ -126,7 +161,7 @@ namespace DamageAssesment.Api.Attachments.Providers
|
||||
foreach (var file in item.postedFiles)
|
||||
{
|
||||
Models.Attachment attachment= attachments.Where(a=>a.Id == file.AttachmentId).FirstOrDefault();
|
||||
var UserfileName = Path.GetFileName(file.FileName);
|
||||
var UserfileName = Path.GetFileName(file.FileName + file.FileExtension);
|
||||
var fileName = String.Format("Attachment_{0}{1}", attachment?.Id, file.FileExtension);
|
||||
var dbPath = Path.Combine(fullDirectoryPath, fileName);
|
||||
File.WriteAllBytes(dbPath, Convert.FromBase64String(file.FileContent));
|
||||
|
Reference in New Issue
Block a user