Je sais que cette question a été posée plusieurs fois ici, mais je ne trouve pas de solution à mon problème. J'essaye d'enregistrer l'image dans le dossier dans .net c # mais obtenez cette exception:
Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)
J'ai donné le contrôle total de ce dossier (savehere) à network service
et iis_iusrs
, j'ai même donné un contrôle total sur everyone
mais toujours cette exception. J'ai essayé de donner accès via l'explorateur et via le gestionnaire IIS, toujours pas de chance
Je le fais sur le serveur Windows 2008 R2 et IIS 7.5, de qui ai-je besoin pour donner accès?
Merci
Réponses:
Vous devez trouver dans le pool d'applications du site Web quelle est l'identité sous laquelle il s'exécute (par défaut, il s'agit
Application Pool Identity
) et lui accorder les autorisations appropriées.la source
ApplicationPoolIdentity
, comment puis-je leur donner des autorisations?IIS APPPOOL\DefaultAppPool
utilisateur. Voir cet article sur le site officiel d'IIS: learn.iis.net/page.aspx/624/application-pool-identitiesDefaultAppPool
et lui ai donné lesfull control
autorisations, maiseveryone
le contrôle total. Si nous accordonseveryone
le contrôle total, même alors nous devons accorder l'accès àDefaultAppPool
? C'est confu.Images
répertoire pour l'utilisateur / l'identité qui exécute le site Web (vous devrez demander à votre fournisseur d'hôte à ce sujet).Lisez attentivement le message. Vous essayez d'enregistrer dans un fichier portant le même nom que le répertoire. Cela ne peut pas fonctionner, vous ne pouvez pas écraser un répertoire rempli de fichiers avec un seul nouveau fichier. Cela entraînerait une perte de données non diagnostiquée. «L'accès au chemin est refusé» est le système de fichiers qui riposte pour empêcher que cela ne se produise.
Le message d'exception n'est pas idéal, mais il vient directement du système d'exploitation et ils sont gravés dans la pierre. Le framework ajoute souvent des contrôles supplémentaires pour générer de meilleurs messages, mais il s'agit d'un test coûteux sur un réseau. Perf est également une fonctionnalité.
Vous devez utiliser un nom comme 'C: \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg'. Considérez Path.Combine () pour générer de manière fiable le nom du chemin.
la source
J'avais le même problème en essayant de créer un fichier sur le serveur (en fait un fichier qui est une copie d'un modèle).
Voici le message d'erreur complet:
J'ai ajouté un nouveau dossier appelé
Templates
dans le dossier de l'application IIS. Une chose très importante dans mon cas est que je devais donner l'autorisation d'écriture (Gravar) à l'utilisateur IUSR sur ce dossier. Vous devrez peut - être donnerNetwork Service
etASP.NET v$.#
la même autorisation d'écriture.Après avoir fait cela, tout fonctionne comme prévu.
la source
J'ai eu exactement le même problème.
La solution était que le fichier auquel j'essayais d'accéder était en lecture seule , car il était copié à partir d'un fichier modèle en lecture seule.
<facepalm />
la source
J'ai eu ce problème lorsque j'essaie d'enregistrer le fichier sans définir le nom du fichier.
Ancien code
Code de travail
la source
Mon problème était que je devais demander un accès en lecture uniquement:
la source
Quelle est l'identité de votre pool d'applications pour l'application Web exécutée en tant que, pour résoudre les problèmes, essayez de créer un nouveau pool d'applications avec, par exemple, le service réseau comme identité et faites en sorte que votre application Web utilise ce nouveau pool d'applications que vous avez créé et voyez si l'erreur persiste.
la source
L'astuce suivante n'est pas une réponse à la question originale de ce fil, mais pourrait aider d'autres utilisateurs qui se retrouvent sur cette page Web, après avoir commis la même erreur stupide que je viens de faire ...
J'essayais d'obtenir un contrôle ASP.Net FileUpload pour télécharger son fichier vers une adresse réseau contenant un " partage caché ", à savoir:
\ MyNetworkServer \ c $ \ SomeDirectoryOrOther
Je n'ai pas compris. Si j'exécutais la page Web en mode débogage dans Visual Studio, cela fonctionnerait bien. Mais lorsque le projet a été déployé et s'exécutait via un utilisateur du pool d'applications, il a refusé de trouver ce répertoire réseau.
J'avais vérifié sous quel utilisateur mon site IIS fonctionnait, j'ai donné à cet utilisateur des autorisations complètes sur ce répertoire sur le serveur " MyNetworkServer ", etc., mais rien n'a fonctionné.
La raison (bien sûr!) Est que seuls les administrateurs peuvent "voir" ces partages de lecteurs cachés.
Ma solution consistait simplement à créer un partage "normal" sur
\ MyNetworkServer \ SomeDirectoryOrOther
et cela a éliminé l'erreur "L'accès au chemin ... est refusé". FileUpload a réussi à exécuter la commande
J'espère que cela aidera d'autres utilisateurs qui font la même erreur que moi!
Notez également que si vous téléchargez des fichiers volumineux (plus de 4 Mo), IIS7 nécessite que vous modifiiez le fichier web.config à deux endroits. Cliquez sur ce lien pour lire ce que vous devez faire: Télécharger de gros fichiers dans ASP.Net
la source
veuillez ajouter l'autorisation de contrôle total IIS_IUSERS à votre dossier. vous trouvez cette option dans l'onglet de sécurité dans les propriétés du dossier.
la source
J'ai résolu avec ce paramètre:
la source
Mon problème était quelque chose comme ça:
mais au lieu d'utiliser le chemin, je devrais utiliser File.FullName ... Je ne sais pas si cela va aider quelqu'un d'autre, juste en passant ma propre expérience avec cet erro donné!
la source
Modifiez le paramètre de compte intégré en compte personnalisé et entrez le nom d'utilisateur et le mot de passe de l'autre serveur.
Conservez le paramètre intégré (au lieu du mode classique).
la source
Peut-être que ça t'aidera.
la source
Faire enregistrer le répertoire ici pour être un répertoire virtuel et donner l'autorisation de lecture / écriture à partir du panneau de commande
la source
Avait un répertoire du même nom que le fichier que j'essayais d'écrire, donc les gens peuvent aussi le rechercher.
la source
J'ai rencontré ce problème lors du développement sur mon poste de travail local.
Après plusieurs
iisreset
invocations infructueuses , j'ai remédié à cette situation en redémarrant ma machine.Rétrospectivement, un descripteur de fichier ouvert peut avoir causé des problèmes.
la source
Dans mon cas, j'ai dû ajouter une règle d'autorisation .NET pour le site Web dans IIS.
J'ai ajouté une règle pour autoriser les utilisateurs anonymes.
la source
J'ai eu le même problème mais je l'ai résolu en enregistrant le fichier dans un emplacement différent, puis en copiant le fichier et en le collant à l'emplacement où je le voulais. J'ai utilisé l'option pour remplacer le fichier existant et cela a fait l'affaire pour moi. Je sais que ce n'est pas le moyen le plus efficace, mais cela fonctionne et prend moins de 15 secondes.
la source
J'ai eu beaucoup de problèmes avec cela, spécifiquement liés à mon code exécuté localement, mais lorsque je devais l'exécuter sur IIS, cela provoquait cette erreur. J'ai trouvé que l'ajout d'une vérification à mon code et le fait de laisser l'application créer le dossier lors de la première exécution résolvaient le problème sans avoir à modifier les autorisations des dossiers.
quelque chose comme ça avant d'appeler votre méthode qui utilise le dossier
la source
Si vous obtenez cette erreur lors du téléchargement de fichiers dans le sous-domaine et que vous travaillez correctement dans votre
localhost
, suivez les étapes ci-dessous:Solution:
Panneau Plesk
CPanel
Pour plus de détails, reportez-vous ici
Raison de l'erreur:
FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))
ce soit votre code pour déplacer vos fichiers vers le chemin de téléchargement.Server.MapPath
vous donnera le chemin physique (chemin réel) du répertoire. Mais votre sous-domaine peut ne pas avoir l'autorisation d'accéder au chemin physique.Donc, si vous donnez l'autorisation au sous-domaine d'accéder à l'autorisation d'écriture / de modification, cela résoudra le problème.
la source
Vous pouvez essayer de vérifier si vos propriétés Web pour le projet n'ont pas basculé vers IIS Express et les redéfinir sur IIS Local
la source
Assurez-vous que votre cible dans
System.IO.Delete(string file)
est un fichier qui existe. Peut-être qu'il y a une erreur dans votre code; comme si vous ne transmettez pas le nom de fichier correct à la méthode ou que votre cible est un dossier. Dans ces cas, vous verrez le message: "l'erreur d'accès au chemin est refusée".la source
J'ai créé un répertoire virtuel avec l'autorisation complète et y ai ajouté la source ffmpeg et les fichiers vidéo, donc finalement cela a du sens car il peut être accessible par n'importe qui.
la source