2016-04-06 27 views
6

Con Asp.NET Core, le pratiche funzioni di ricerca del percorso in Ambiente sono esaurite. HttpContext e HttpServerUtility sono stati eliminati. E il negozio di applicazioni all'interno del framework Cache è sparito. Non posso più presumere (nel codice) che il mio server stia usando IIS o che sia persino in esecuzione su una scatola di Windows.Archiviazione di file locali con ASP.NET Core e MVC

E non ho un database; Ho un set di file JSON. Che, per ragioni al di fuori dello scopo di questa domanda, non può essere memorizzato in un database.

Come leggere e scrivere sui file sul server?

risposta

7

Nel nuovo mondo ASP.NET core quando abbiamo distribuire Abbiamo 2 cartelle AppRoot e wwwroot

abbiamo in genere solo mettere i file sotto la cartella wwwroot che intendiamo servire direttamente con le richieste http. Quindi se i file JSON devono essere serviti direttamente, cioè consumati dal lato client js, allora forse li metteresti lì, altrimenti useresti una cartella diversa sotto appRoot.

Mostrerò di seguito come risolvere i percorsi per entrambi gli scenari, ad esempio il codice di esempio su come salvare una stringa json in una cartella sotto appRoot o wwwroot. In entrambi i casi pensate alla vostra posizione come un percorso relativo virtuale ad una di queste cartelle, vale a dire/some/cartella/percorso in cui il primo/rappresenta sia AppRoot o wwwroot

public class MyFileProcessor 
{ 

    public MyFileProcessor(IHostingEnvironment env, IApplicationEnvironment appEnv) 
    { 
     hostingEnvironment = env; 
     appEnvironment = appEnv; 
     appRootFolder = appEnv.ApplicationBasePath; 
    } 

    private IHostingEnvironment hostingEnvironment; 
    private IApplicationEnvironment appEnvironment; 
    private string appRootFolder; 


    public void SaveJsonToAppFolder(string appVirtualFolderPath, string fileName string jsonContent) 
    { 
     var pathToFile = appRootFolder + appVirtualFolderPath.Replace("/", Path.DirectorySeparatorChar.ToString()) 
     + fileName; 

     using (StreamWriter s = File.CreateText(pathToFile)) 
     { 
      await s.WriteAsync(jsonContent); 
     } 

    } 

    public void SaveJsonToWwwFolder(string virtualFolderPath, string fileName string jsonContent) 
    { 
     var pathToFile = hostingEnvironment.MapPath(virtualFolderPath) + fileName; 

     using (StreamWriter s = File.CreateText(pathToFile)) 
     { 
      await s.WriteAsync(jsonContent); 
     } 

    } 


} 
+0

se avete bisogno di ulteriore codice di esempio, ho un progetto qui dove sto salvando i post del blog come file xml e pagine di contenuto come file json https://github.com/joeaudette/cloudscribe.SimpleContent –

+0

Ho un problema in cui non vorrei salvare i file caricati in una cartella esterna il mio webroot come un percorso UNC o qualcosa del genere. È possibile? –