public JsonResult Post(ResocontoLavoro r) { using (var context = new core.SHIFT_MANAGERContext()) { Thread.Sleep(3000); // passo il resoconto alla funzione che estrae, salva le immagini // se la funzione va a buon fine, negli scontrini ho dentro la path if (_imgWorker.ScontrinoHandler(r)) { try { context.ResocontoLavoro.Add(r); return(new JsonResult(new { RowEffected = context.SaveChanges() })); } catch (Exception ex) { Trace.WriteLine("Errore nel salvataggio database del resoconto lavori" + ex.Message); return(new JsonResult(new { RowEffected = 0, Error = ex.InnerException.InnerException.Message })); } } else { return(new JsonResult(new { RowEffected = 0, Error = "Errore nella gestione salvataggio scontrini." })); } } }
public bool ScontrinoHandler(ResocontoLavoro resoconto) { foreach (Scontrini s in resoconto.Scontrini) { string img64 = s.Body; byte[] blob; //se è arrivato un body vuoto, ovvero quando viene aggiunto uno scontrino ma non viene //selezionato nessun file if (img64.Trim() == "") { continue; } try { img64 = img64.Substring(img64.IndexOf(",") + 1); blob = Convert.FromBase64String(img64); } catch (System.Exception ex) { Trace.WriteLine("errore lettura e conversione immagine :" + ex.Message); return(false); } using (var context = new core.SHIFT_MANAGERContext()) { try { //create path string nomeCommessa = context.Commesse .Where(c => c.CommessaId == resoconto.CommessaId) .First().Nome; string nomeCliente = context.Commesse.Include(co => co.Cliente) .Where(c => c.CommessaId == resoconto.CommessaId) .First().Cliente.Nome; var nomeUtente = context.Utenti.Where(u => u.UtenteId == resoconto.UtenteId) .Select(n => new{ n.Nome, n.Cognome }).First(); int anno = resoconto.DataIntervento.Year; string mese = resoconto.DataIntervento.ToString("MMMM"); int giorno = resoconto.DataIntervento.Day; string nomeGiorno = resoconto.DataIntervento.DayOfWeek.ToString(); int numeroScontrino = 1; string ext = ".jpg"; string path = @"/home/luca/scontrini/"; path += $@"{nomeCliente}/{nomeCommessa}/{anno}/{mese}/"; string fileName = $@"[{giorno}]{nomeUtente.Nome}_{nomeUtente.Cognome}"; //ricerca file esistenti per lo stesso giorno if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } else { //se la path esiste, conto se esistono scontrini con giorno e nome utente uguali, //se dovessero esiste sommo al numero di socntrino per il salvataggio numeroScontrino += System.IO.Directory.GetFiles(path).Count(n => n.Contains(fileName)); } //aggiungo al nome del file il numero dello scontrino fileName += $"#{numeroScontrino}"; string fullPath = path + fileName + ext; System.IO.File.WriteAllBytes(fullPath, blob); //se la scrittura è ok, salvo nel database solamente la path s.Body = fullPath; } catch (System.Exception ex) { Trace.WriteLine("errore formulazione path e salvataggio immagini :" + ex.Message); return(false); } } } //return true vuol dire operazione finita, senza errori, //quindi array vuoto ritornerà true return(true); }