2011-04-28 14 views
7

Ho una sezione di amministrazione del sito Web su cui sono impegnato a lavorare, che ha 4 controlli FileUpload per scopi specifici. Devo sapere che, quando uso il metodo Server.MapPath() all'interno dei metodi SaveAs() del controllo FileUpload, sarà ancora utilizzabile sul server Web dopo aver caricato il sito Web? Per quanto ne so, SaveAs() richiede un percorso assoluto, è per questo che traccio un percorso con Server.MapPath()Caricamento file tramite Server.MapPath() e FileUpload.SaveAs()

if (fuLogo.HasFile) //My FileUpload Control : Checking if a file has been allocated to the control 
     { 
      int counter = 0; //This counter Is used to ensure that no files are overwritten. 
      string[] fileBreak = fuLogo.FileName.Split(new char[] { '.' }); 
      logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString()+ "." + fileBreak[1]); // This is the part Im wondering about. Will this still function the way it should on the webserver after upload? 
      if (fileBreak[1].ToUpper() == "GIF" || fileBreak[1].ToUpper() == "PNG") 
      { 
       while (System.IO.File.Exists(logo)) 
       { 
        counter++; //Here the counter is put into action 
        logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString() + "." + fileBreak[1]); 
       } 
      } 
      else 
      { 
       cvValidation.ErrorMessage = "This site does not support any other image format than .Png or .Gif . Please save your image in one of these file formats then try again."; 
       cvValidation.IsValid = false; 
      } 
      if (fuLogo.PostedFile.ContentLength > 409600) //File must be 400kb or smaller 
      { 
       cvValidation.ErrorMessage = "Please use a picture with a size less than 400 kb"; 
       cvValidation.IsValid = false; 

      } 
      else 
      { 

       if (fuLogo.HasFile && cvValidation.IsValid) 
       { 
        fuLogo.SaveAs(logo); //Save the logo if file exists and Validation didn't fail. The path for the logo was created by the Server.MapPath() method. 
       } 

      } 
     } 
     else 
     { 
      logo = "N/A"; 
     } 
+0

Oh, ed il marchio è una variabile stringa dichiarata in ambito globale – Eon

risposta

4
  • Se si desidera salvare i file in una directory sul server web, quindi il Server.MapPath() sarà la soluzione adatta.

    string dirPath = System.Web.HttpContext.Current.Server.MapPath("~") + "/Images/Logos/"+ fileBreak[0] + counter.ToString() + "." + fileBreak[1];

    sguardo Here

  • se avete intenzione di salvare i file fuori il server web allora

    Utilizzare un percorso completo, come "c: \ uploads" ed essere sicuri che il processo web ha l'autorizzazione per scrivere in quella cartella, suggerisco di memorizzare il percorso stesso nel file web.config in questo caso.

+1

Informazioni molto utili che hai consegnato lì, nel tuo secondo punto. Cercherò di farlo in fretta prima di aprire un'altra vena al supporto clienti – Eon

+0

I percorsi completi sono memorizzati nel database e ho intenzione di caricare le immagini nella directory Immagini/loghi. Il percorso verrebbe letto dal database e suddiviso nel percorso root necessario per accedere a questa immagine appena caricata. – Eon

0

Sì, dovrebbe funzionare come Server.MapPath utilizza i valori relativi e restituisce il percorso fisico completo.

+0

Il risultato che ho avuto per un'immagine denominata test.png stato C:/TestSite /Images/Logos/Test0.Png (come un file appena salvato), e questo era il risultato che stavo cercando. Volevo solo sapere se sarei ancora in grado di accedere al file sul server web (quando caricato sul server web). Ovviamente finirebbe in un relativo Images/Logos/Directory. Solo, sarebbe caricato in modo legittimo e utilizzabile dal mio sito Web quando provo ad accedere a test0.png? – Eon

3

sì, che può essere utilizzato dopo il salvataggio del file e quando si tenta di recuperare quel file ...

Server.MapPath("~/Images/Logos/" + uploadedFileName); 
+0

motivo per cui il server.MapPath aveva un ../Images/Logos è che doveva tornare indietro di una directory, quindi andare in Images/Logos. Sono contento che funzionerebbe sul server web, perché ho letto da qualche parte che Server.MapPath() non funziona sempre come previsto una volta caricata la pagina. Ma grazie comunque. – Eon

+1

prova a usare sempre il segno ~, che inizierà dalla directory principale. –

+0

quindi dovrei cambiarlo in ~ /../ Immagini/loghi? :? – Eon

0

E 'una riga di codice:

FileUpload1.PostedFile.SaveAs(Server.MapPath(" ")+"\\YourImageDirectoryOnServer\\"+FileUpload1.FileName); 
Problemi correlati