2013-07-24 3 views
5

Il progetto è un'applicazione Web basata su MVC 4 C#.C# salva i file nella cartella sul server anziché locale

Attualmente sto lavorando localmente e vorrei avere la possibilità di caricare un file sulla mia applicazione in esecuzione locale in modalità di debug e avere il file salvato sul server web invece della mia cartella locale.

Attualmente stiamo usando:

if (!System.IO.File.Exists(Server.MapPath(PicturePath))) 
{ 
    file.SaveAs(Server.MapPath(PicturePath)); 
} 

Come possiamo sfruttare questo codice per salvare su un server web direttamente. È possibile?

In questo momento il file viene salvato sul mio percorso locale e il percorso viene archiviato nel database, quindi dobbiamo caricare manualmente i file sul server web.

+0

Perché non si distribuisce l'app sul server Web? – Icarus

+0

Giusto per essere chiari, vuoi eseguire la tua app localmente, ma salva l'immagine sul tuo webserver? Perché non salvate semplicemente le immagini in una cartella condivisa sul vostro server web? –

+0

Perché eseguo il debug sul mio ambiente locale e ho risolto tutti i bug prima di distribuire l'applicazione. –

risposta

6

La funzione SaveAs prende un nome di file e salverà il file in qualsiasi percorso si dà, fornendo siano soddisfatte le seguenti condizioni:

  • È macchina locale può accedere al percorso del file
  • tuo account locale ha la i privilegi corretti per scrivere sul percorso file

Suggerisco di avere un'impostazione web.config che può essere controllata durante l'esecuzione del codice. Quindi puoi decidere se usare Server.MapPath o un percorso assoluto.

Per esempio, in "debug" di più (in esecuzione in locale) si potrebbe avere le seguenti impostazioni:

<appSettings> 
    <add key="RunningLocal" value="true" /> 
    <add key="ServerFilePath" value="\\\\MyServer\\SomePath\\" /> 
</appSettings> 

e in modalità "live":

<appSettings> 
    <add key="RunningLocal" value="false" /> 
    <add key="ServerFilePath" value="NOT USED" /> 
</appSettings> 

Poi il codice può sembrare qualcosa di In questo modo:

bool runningLocal = GetFromConfig(); 
bool serverFilePath = GetFromConfig(); 
string filePath; 

if(runningLocal) 
    filePath = serverFilePath; 
else 
    filePath = Server.MapPath(PicturePath); 

if (!System.IO.File.Exists(filePath)) 
{ 
    file.SaveAs(filePath); 
} 
+0

Quindi, se utilizzo il filepath diretto dal mio locale al server web, dovrei essere in grado di salvarlo direttamente in quella posizione, a condizione che il mio account sul mio locale abbia accesso in scrittura a tale directory? –

+0

@RobCarroll: corretto. Basta tenere a mente, se si esegue localmente utilizzando IIS, sarà l'account utente utilizzato all'interno di IIS che deve avere accesso – musefan

+0

grazie per tutto il vostro aiuto, era esattamente quello che stavo cercando. –