public async Task <IActionResult> GetEntree(int id) { var EntreeDetails = new List <EntreeDetailMappingResource>(); var existedEntreeFromDB = await _entreeRepository.GetEntree(id); if (existedEntreeFromDB == null) { return(NotFound()); } var result = _mapper.Map <Entree, SaveEntreeResource>(existedEntreeFromDB); if (existedEntreeFromDB.MappingDetailsWithCurrentEntree != null && existedEntreeFromDB.MappingDetailsWithCurrentEntree.Count > 0) { foreach (var esds in existedEntreeFromDB.MappingDetailsWithCurrentEntree) { EntreeDetailMappingResource map = new EntreeDetailMappingResource(esds.EntreeDetailId, esds.EntreeDetail.Name, esds.Quantity, esds.EntreeDetail.EntreeDetailType.DetailName); EntreeDetails.Add(map); } result.EntreeDetails = EntreeDetails; } // Return view Model return(Ok(result)); }
public async Task <IActionResult> Upload(int entreeId, IFormFile file) { var entree = await _entreeRepository.GetEntree(entreeId, includeRelated : false); if (entree == null) { return(NotFound()); } if (file == null) { return(BadRequest("Null file")); } if (file.Length == 0) { return(BadRequest("Empty file")); } //if (file.Length > _photoSettings.MaxBytes) return BadRequest("Max file size exceed."); if (!_photoSettings.IsSupported(file.FileName)) { return(BadRequest("Invalid file type")); } // have to upload to web api wwwroot instead of client side asset because anything inside asset will only be included after webpack run // use staticfile in startup.cs var uploadsFolderPath = Path.Combine(_host.WebRootPath, "upload"); // c:\wwwroot\.. if (!Directory.Exists(uploadsFolderPath)) { Directory.CreateDirectory(uploadsFolderPath); } //always generate new file name for security issue //because hacker may modify the request by changing the file name from "file.png" to "../../../windows/system/asd.dll" var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName); var filePath = Path.Combine(uploadsFolderPath, fileName); var entreePhoto = new EntreePhoto { FileName = fileName }; using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); //using (var memoryStream = new MemoryStream()) //{ // await file.CopyToAsync(memoryStream); // entreePhoto.FileBlob = memoryStream.ToArray(); //} } entree.EntreePhotos.Add(entreePhoto); await _uow.CompleteAsync(); return(Ok(entreePhoto)); }