229 messaggi dal 20 novembre 2014
Ciao a tutti,
ho un problemino con una funzioncina di caricamento file, sapete indicarmi un modo per far si che se non riesce a caricare il file si blocchi l'inserimento del record su db?
Posto il codice

[HttpPost]
        public ContentResult Index(int id, string enid)
        {

            FileUpload f = new FileUpload();

            foreach (string file in Request.Files)
            {
                HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
                string[] nameext;

                string uniname; //creiamo un nome univoco
                nameext=hpf.FileName.Split('.');
                uniname = nameext[0] + '.' + nameext[1];
                if (hpf.ContentLength == 0)
                    continue;
                
                string entita = enid;
                

                if (!Directory.Exists(@"\\192.168.0.21\TestNet\" + entita))
                    Directory.CreateDirectory(@"\\192.168.0.21\TestNet\" + entita);

                string savedFileName = Path.Combine((@"\\192.168.0.21\TestNet\" + entita), Path.GetFileName(uniname));

                

                hpf.SaveAs(savedFileName);
        
                f.Nome = uniname;
                f.ext = nameext[1]; 
                f.Dimensione = hpf.ContentLength;
                f.Tipo = hpf.ContentType;
                f.Utente = User.Identity.Name;
                f.Modificato = DateTime.Now;
                f.Entita = entita;
                f.idmadre = id;
               
                db.FileUpload.Add(f);
                db.SaveChanges();

            }
            
            return Content("{\"name\":\"" + f.Nome + "\",\"type\":\"" + f.Tipo + "\",\"size\":\"" + string.Format("{0} bytes", f.Dimensione) + "\"}", "application/json");
        }
    }


è capitato già due volte che l'utente carica il file, il caricamento non riesce (penso per un problema di copertura di rete) ma riesce comunque a fare l'inserimento su db, per cui nel riepilogo file questo compare anche se nella realtà non esiste e va in errore se si prova la cancellazione!
Qualcuno ha un'idea?
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
subito dopo aver invocato il SaveAs per salvare il file, verifica se effettivamente il file è stato creato in quel percorso e se ha dimensione maggiore di 0. Solo se è così, allora procedi al salvataggio dell'entità nel database.

var info = new FileInfo(savedFileName);

if (info.Exists && info.Length > 0) {
  f.Nome = uniname;
  f.ext = nameext[1]; 
  f.Dimensione = hpf.ContentLength;
  f.Tipo = hpf.ContentType;
  f.Utente = User.Identity.Name;
  f.Modificato = DateTime.Now;
  f.Entita = entita;
  f.idmadre = id;
               
  db.FileUpload.Add(f);
  db.SaveChanges();
}


Potrebbe sempre capitare che il file arrivi corrotto ma di questo è difficile averne evidenza. Es. se si tratta di file zip puoi verificare che l'archivio sia integro. Se è un'immagine, puoi verificare che riesci ad aprirla con le classi di GDI+, e così via.

ciao,
Moreno
Modificato da BrightSoul il 11 luglio 2017 18.13 -

Enjoy learning and just keep making
229 messaggi dal 20 novembre 2014
Sei un grande, soluzione semplicissima ma non ci avevo riflettuto! Grazie mille

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.