Пример #1
0
        public async Task <IActionResult> UploadImage([FromForm(Name = "image")] IFormFile uploadImg)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(User.Identity.Name))
                {
                    return(BadRequest("User nicht eingeloggt, hochgeladene Datei kann User nicht zugeordnet werden!"));
                }

                if (uploadImg == null)
                {
                    return(BadRequest("Datei konnt nicht entgegengenommen werde."));
                }

                if (uploadImg.Length == 0)
                {
                    return(BadRequest("Es wurde keine Datei übergeben (Dateigröße ist 0 Byte)"));
                }

                //Checken ob hochgeladene Datei ein Bild ist
                if (!_CheckDateiGleichBildService.CheckenDateiIstBild(uploadImg))
                {
                    return(BadRequest("Hochgeladene Datei ist kein Bild, momentan können nur Bilder hochgeladen werden!"));
                }

                //Filename randommässig erzeugen (Achtung Original-Dateiname nie abspeichern!!! Kann von bösatigen Usern zu Hackzwecken verwendet werden)
                string newUploadFileName = _CreateZufallsDateinamenService.CreateZufallsDateinamen(_CheckDateiGleichBildService.GetFileExtension(uploadImg));

                string speicherOrdner      = $"{_HostingEnvironment.WebRootPath}\\{User.Identity.Name}\\UploadFiles\\";
                string speicherOrdnerDatei = $"{_HostingEnvironment.WebRootPath}\\{User.Identity.Name}\\UploadFiles\\{newUploadFileName}";
                string webUrlBild          = $"\\{User.Identity.Name}\\UploadFiles\\{newUploadFileName}";

                //Existiert der Ordner? Wenn nein neu anlegen
                if (!Directory.Exists(speicherOrdner))
                {
                    Directory.CreateDirectory(speicherOrdner);
                }

                //Statt dem original Dateinamen wird eine Random-Name erzeugt der dann abgespeichert wird
                using (FileStream stream = System.IO.File.Create(speicherOrdnerDatei))
                {
                    uploadImg.CopyTo(stream);
                    stream.Flush();
                }

                //Speichern des Verweises (wo Datei abgelegt wurde) in der Datenbank
                var loggedInUser = await _UserManager.FindByNameAsync(User.Identity.Name);

                FinanceImage neuImage = new FinanceImage()
                {
                    Path       = speicherOrdnerDatei,
                    UploadDate = DateTime.Now,
                    ImageName  = $"Am {DateTime.Now.ToShortDateString()} hochgeladenes Bild",
                    Url        = webUrlBild
                };

                var storedImage = _ImageRepository.AddNeuImage(neuImage, loggedInUser);

                if (storedImage.Id <= 0)
                {
                    return(BadRequest("Das hochgeladene Bild konnte nicht gespeichert werden."));
                }

                //Metadaten des Bildes die an den Client zurückgesandt werden sobald Bild hochgeladen wurde
                ImageMetaViewModel uploadImageMeta = _Mapper.Map <FinanceImage, ImageMetaViewModel>(storedImage);
                //uploadImageMeta.ImageSource = webUrlBild;

                return(CreatedAtAction("UploadImage", uploadImageMeta));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }