2015-08-20 12 views
7

Non riesco a caricare il file in .net C#. Sto usando il seguente codice:L'accesso al percorso ... è negato durante il caricamento file in .net

try 
{ 
    var provider = new MultipartMemoryStreamProvider(); 
    await Request.Content.ReadAsMultipartAsync(provider); 
    foreach (var file in provider.Contents) 
    { 
     var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Resources");      
     var dataStream = await file.ReadAsStreamAsync(); 
     FileStream fileStream = File.Create(mappedPath, (int)dataStream.Length); 
    } 
    var response = Request.CreateResponse(HttpStatusCode.OK); 
    response.Content = new StringContent("Successful upload", Encoding.UTF8, "text/plain"); 
    response.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue(@"text/html"); 
    return response; 
} 
catch (Exception e) 
{ 
    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message); 
} 

Questo succede su localhost. Ho l'errore "Accesso al percorso ... negato". Ho provato a cambiare i permessi di sicurezza per la cartella "Risorse", ma probabilmente non so quale gruppo/nome utente aggiungere Controllo completo.

ho provato:

  1. scegliere nomecomputer e aggiungere SERVIZIO DI RETE - Controllo del
  2. scegliere nomecomputer e aggiungere IIS_IUSERS - Controllo del
  3. Ho provato tutti sopra e IDE anche in esecuzione come amministratore
+4

Sembra che si stia specificando un percorso di cartella come parametro per il metodo di creazione. Richiede un percorso per un file. –

+0

L'eccezione viene generata su quale linea? – CarbineCoder

risposta

2

Sembra che si stia tentando di sovrascrivere la directory con l'assegnazione mappedPath, che potrebbe essere la causa effettiva e non le autorizzazioni.

Tuttavia, in termini di autorizzazioni, poiché si fa riferimento a IIS_IUSERS, sembra che si stia lavorando in IIS. Considera di concedere il permesso di scrittura all'identità in cui il tuo processo è in esecuzione come; controlla l'impostazione 'Identity' (IIS7 +) sotto 'Process Model' (Impostazioni avanzate per il Pool di App) - se è ApplicationPoolIdentity, dovrai aggiungere quell'identità nelle autorizzazioni per la cartella.

Ad esempio, se il pool di applicazioni è denominato my-app.com, l'utente locale sarebbe [iis apppool \ my-app.com].

3

Nella tua foreach ciclo si ha:

foreach (var file in provider.Contents) 
    { 
     var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Resources");      
     var dataStream = await file.ReadAsStreamAsync(); 
     FileStream fileStream = File.Create(mappedPath, (int)dataStream.Length); 
    } 

s' File.Create primo argomento dovrebbe essere il percorso di un file, ma il vostro mappedPath è il percorso di una directory. Si potrebbe fare qualcosa del tipo:

var filePath = Path.Combine(mappedPath, fileNameWithExtension); 
FileStream fileStream = File.Create(filePath, (int)dataStream.Length);