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));
        }
Esempio n. 2
0
        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));
        }