web-dev-qa-db-fra.com

ASP.net Obtenir l'erreur "L'accès au chemin est refusé." en essayant de télécharger des fichiers sur mon serveur Web Windows Server 2008 R2

J'ai une application Web asp.net qui télécharge des fichiers dans un dossier spécifique du serveur Web. localement, tout fonctionne bien, mais lorsque je déploie l'application sur le serveur Web, l'erreur "L'accès au chemin" D:\Attachments\myfile.doc "est refusé". J'ai indiqué à l'utilisateur "IIS AppPool" que l'application s'exécutait sous une autorisation complète du dossier. J'ai même donné "Tout le monde" des autorisations complètes, mais avec la même erreur.

J'ai ajouté le dossier à la liste des exceptions de l'antivirus, mais avec le même résultat. Je commence à penser que Windows Server 2008 R2 a peut-être besoin d'une astuce pour que mon téléchargement fonctionne. J'apprécie vraiment votre aide.

Merci 

45
Hassan Mokdad

Votre compte asp.net {MACHINE}\ASPNET n'a pas d'accès en écriture à cet emplacement. C'est la raison pour laquelle son échec.

Envisagez d'accorder des droits d'accès à la ressource à l'identité de la demande ASP.NET. 

Cliquez avec le bouton droit sur le dossier de téléchargement Properties > Security Tab > Edit > Add > locations > choose your local machine > click OK > Type ASPNET below "Enter the object name to select" > Click Check Names Cochez les cases correspondant à l'accès souhaité (Full Control). Si cela ne fonctionne pas pour vous, faites de même avec Network Service

Cela devrait maintenant afficher votre compte {MACHINENAME}\ASPNET local, puis vous définissez l'autorisation d'écriture sur ce compte.

Sinon, si l'application emprunte l'identité de <identity impersonate="true"/>, l'identité sera l'utilisateur anonyme (généralement IUSR_MACHINENAME) ou l'utilisateur de la demande authentifiée. 


Ou utilisez simplement un emplacement dédié pour stocker des fichiers dans ASP.NET qui est App_Data. Pour le créer, cliquez avec le bouton droit sur votre projet ASP.NET (dans Visual Studio) Add > Add ASP.NET Folder > App_Data. Ensuite, vous pourrez enregistrer les données à cet emplacement:

var path = Server.MapPath("~/App_Data/file.txt");
System.IO.File.WriteAllText(path, "Hello World");
45
Damian Drygiel

Faites un clic droit sur votre dossier sur votre serveur ou votre ordinateur local et donnez toutes les autorisations nécessaires 

IIS_IUSRS

c'est tout.

64
UMAR

le problème peut être que networkservice n'a pas de droit de lecture

salution:

cliquez avec le bouton droit de la souris sur votre dossier de téléchargement -> Poperty's -> Sécurité -> Édition -> Ajouter -> tapez: SERVICE RÉSEAU -> case à cocher Contrôle total autorisé-> appuyez sur ok ou appliquez

11

Si quelqu'un tombe sur cela car c'est le premier résultat dans Google,

n'oubliez pas de spécifier également le nom de fichier dans la méthode SaveAs.

Ne fonctionnera pas

file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation));

Tu en as besoin:

filename = Path.GetFileName(file_upload.PostedFile.FileName);
file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation + "\\" + filename));

J'ai supposé que la méthode SaveAs utiliserait automatiquement le nom de fichier uploadé . Il a été enregistré avec l'erreur "Accès refusé". Pas très descriptif du problème actuel

1
Shaakir

J'ai fait face à ce problème une fois et dans mon cas la solution est pour fermer tout processus dans le gestionnaire de tâches qui utilise/accède à ce fichier .

1
user6243946

Je sais que c'est tard pour le jeu, mais je voulais partager au cas où cela aiderait quelqu'un. 

Votre situation exacte peut ne pas s'appliquer, mais j'ai eu une situation similaire et la définition de l'attribut Fichier a aidé.

Essayez de définir l'attribut File sur Normal:

var path = Server.MapPath("~/App_Data/file.txt");
File.SetAttributes(path, FileAttributes.Normal);
System.IO.File.WriteAllText(path, "Hello World");

J'espère que ça aidera quelqu'un.

0
Spencer Sullivan

Avez-vous regardé sous Paramètres de sécurité avancés?

quelque chose comme ci-dessous les autorisations de changement d'image du dossier sur IIS_IUSRS

 enter image description here

0
Adhik