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
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");
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.
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
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
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 .
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.