Files
familytree/API/FamilyTreeAPI/Controllers/FileUploadController.cs
T
2025-08-29 23:17:58 +10:00

76 lines
2.6 KiB
C#

using FamilyTreeAPI.Entities;
using FamilyTreeAPI.Repository;
namespace FamilyTreeAPI.Controllers;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;
[ApiController]
[Route("api/[controller]")]
public class FileUploadController : ControllerBase
{
private readonly IWebHostEnvironment _hostingEnvironment;
private readonly ImportPersonRepository _importPersonRepository;
private readonly IConfiguration _config;
public FileUploadController(IWebHostEnvironment hostingEnvironment, ImportPersonRepository importPersonRepository, IConfiguration config)
{
_hostingEnvironment = hostingEnvironment;
_importPersonRepository = importPersonRepository;
_config = config;
}
[HttpPost("UploadFile")]
public async Task<IActionResult> UploadFile(IFormFile file)
{
List<CodeDto<string>> output = new ();
if (file == null || file.Length == 0)
{
return BadRequest("No file uploaded.");
}
try
{
// Define the upload directory
// var uploadsFolder = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
string importFolder = _config.GetValue<string>("ImportFolder");
var uploadsFolder = Path.Combine(_hostingEnvironment.ContentRootPath, importFolder);
if (!Directory.Exists(uploadsFolder))
{
Directory.CreateDirectory(uploadsFolder);
}
// Create a unique file name to avoid overwriting
var uniqueFileName = Path.GetFileNameWithoutExtension(file.FileName)
+ "_" + System.Guid.NewGuid().ToString()
+ Path.GetExtension(file.FileName);
var filePath = Path.Combine(uploadsFolder, uniqueFileName);
// Save the file to the server
using (var stream = new FileStream(filePath, FileMode.Create))
{
// await file.CopyToAsync(stream);
await file.CopyToAsync(stream);
// output = await _importPersonRepository.ImportPerson(stream, "Sheet1");
}
using (var stream = new MemoryStream())
{
await file.CopyToAsync(stream);
output = await _importPersonRepository.ImportPerson(stream, "Sheet1");
}
//return Ok(new { FileName = uniqueFileName, FilePath = filePath });
return Ok(output);
}
catch (System.Exception ex)
{
return StatusCode(500, $"Internal server error: {ex.Message}");
}
}
}