2015-08-05 14 views
6

Questo codice per il caricamento di file di immagine sta lavorando bene quando costruito su localhost. Ma dopo l'implementazione, non funziona e non dà alcun errore.ASP.NET MVC upload di file di lavoro su costruzione locali, non funzionante dopo la distribuzione

Ho provato a cambiare l'imagePath da /Content/Images/Items/ a ~/Content/Images/Items/ e Content/Images/Items/. Ancora nessuna soluzione.

[HttpPost] 
public ActionResult AddProduct(ProductDisplay productDisplay,HttpPostedFileBase upload) 
{ 
    bool isSaved = false; 
    string fileName = string.Empty; 
    string imagePath = string.Empty; 
    try 
    { 
     if(upload!=null && upload.ContentLength>0) 
     { 
      fileName = System.IO.Path.GetFileName(upload.FileName); 
      imagePath = "/Content/Images/Items/" + fileName; 
      upload.SaveAs(Server.MapPath(imagePath)); 
     } 
     else 
      imagePath = "/Content/Images/Items/" + "NoImage.jpg"; 
     productDisplay.ImagePath = imagePath; 
     ProductMangementBL balProduct = new ProductMangementBL(); 
     isSaved = balProduct.AddProduct(productDisplay); 
    } 
    catch (Exception ex) 
    { 
     isSaved = false; 
    } 
    return RedirectToAction("ProductList", new RouteValueDictionary(new { controller = "Product", action = "ProductList", Id = productDisplay.CategoryID })); 
} 
+0

c'è un'eccezione essere gettato? Vedo solo che imposti un booleano nel blocco catch: non vedi alcuna registrazione, quindi qualsiasi eccezione generata viene ingoiata e informazioni utili che dicono che cosa è andato storto si sta perdendo. senza conoscere l'eccezione, dubito che troverai una soluzione. – user1666620

+0

Non dovrebbe essere un segno '\ and a @' all'inizio? – brothers28

+0

Il problema era con l'autorizzazione del pool di applicazioni. Grazie a tutti per aver messo lì i pensieri qui. – sri

risposta

2

Potrebbe voler verificare il funzionamento del pool di applicazioni e se dispone delle autorizzazioni per scrivere file.

3

Alcune cose da controllare:

var mapped = Server.MapPath(imagePath); 
if (File.Exists(mapped)) 
{ 
    // 
} 
else 
{ 
    throw new FileNotFoundException(imagePath); 
} 

In altre parole, l'immagine potrebbe non essere lì.

0

È necessario creare l'azione testProductAdd e la vista test corrispondente.

Quindi provare a eseguire proprio questo codice senza alcuna gestione delle eccezioni.

fileName = System.IO.Path.GetFileName(upload.FileName); 
imagePath = "/Content/Images/Items/" + fileName; 
upload.SaveAs(Server.MapPath(imagePath)); 

In questo modo è possibile scoprire dove si trova il problema.

+0

spiega perché lo aiuterà a trovare il problema. – user1666620

+0

1) Non si sperimenta il codice di produzione. 2) In questo modo si verifica solo il caricamento del file e il salvataggio del file. Nessun'altra logica influisce su questo codice che può confondervi. – SergeyAn

+0

^^ che non spiega perché aiuterà a risolvere il suo problema. tbh quello di cui ha veramente bisogno è una funzione di logging nel suo gestore di eccezioni, poiché in questo momento l'eccezione viene ingoiata. Piaccia o no, sta già sperimentando il codice di produzione dal momento che non sa quale sia il problema e non può replicarlo localmente. – user1666620

0

Aggiungete una funzione di log vostra gestione delle eccezioni, dal momento che in questo momento si sta solo impostando un valore booleano e mai di usarlo di nuovo prima di uscire la funzione, e quindi perdere le informazioni nell'eccezione.

Scrivi l'eccezione in un file di testo e vi fornirà la causa dell'errore e vi guiderà alla soluzione.

È possibile utilizzare qualcosa di semplice come un StreamWriter di scrivere l'eccezione in un file di testo.

Per esempio:

try 
{ 
    if(upload!=null && upload.ContentLength>0) 
    { 
     fileName = System.IO.Path.GetFileName(upload.FileName); 
     imagePath = "/Content/Images/Items/" + fileName; 
     upload.SaveAs(Server.MapPath(imagePath)); 
    } 
    else 
     imagePath = "/Content/Images/Items/" + "NoImage.jpg"; 
    productDisplay.ImagePath = imagePath; 
    ProductMangementBL balProduct = new ProductMangementBL(); 
    isSaved = balProduct.AddProduct(productDisplay); 
} 
catch (Exception ex) 
{ 
    using (StreamWriter writer = new StreamWriter("C:\\log.txt", true)) 
    { 
     writer.WriteLine(ex); 
    } 
} 

Questo scriverà il messaggio di errore e StackTrace al documento di testo "log.txt" nella vostra unità C:.

0
  • Assegnare l'account "Servizio di rete" alla cartella di destinazione.
  • Quindi fornire le autorizzazioni complete "Servizio di rete" (non protetto).
  • Quindi spostare i file in un'altra cartella (opzione alternativa).

Più sicuro opzione:

0

Potrebbe essere un errore la cartella ding non esiste sul tuo server.

consideri controllare cartella esistenza prima di salvare il file:

string directory=Server.MapPath("/Content/Images/Items/"); 
if(!Directory.Exists(directory)) 
{ 
    Directory.CreateDirectory(directory); 
} 
upload.SaveAs(Path.Combine(directory,fileName)); 
Problemi correlati