2008-12-22 10 views
0

J'ai un programme .NET pour télécharger une image à un serveur Web. J'utilise le contrôle de téléchargement de fichier ASP.NET pour le faire. Le programme fonctionne bien dans mon environnement local, mais quand je le lance sur le serveur Web, je reçois l'erreur suivante:ASP.NET: intermittent « Accès refusé » Erreur lors du téléchargement des fichiers

>  System.UnauthorizedAccessException: 
> Access to the path 
> '\\fsvs02\target03\352972\352974\www.mysite.com\web\content\Images\TempStorage\tempImage.jpg' 
> is denied. 
>  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) 
>  at System.IO.FileStream..ctor(String 
> path, FileMode mode) 
>  at System.Web.HttpPostedFile.SaveAs(String 
> filename) 
>  at uploadimage.UploadImage() 

Une recherche rapide sur Google a confirmé qu'il est un problème d'autorisations; mais comme cela n'arrive que par intermittence, je n'ai pas de plan pour diagnostiquer comment le réparer.

Ma question est: Que dois-je faire pour diagnostiquer et résoudre ce problème?

Répondre

2

-vous télécharger le fichier sur le même nom pour chaque utilisateur (il semble du message d'erreur que c'est le cas)? Si oui, alors c'est probablement comme le dit Ady. Au lieu de cela, utilisez Path.GetTempFileName pour générer un nom de fichier pour votre fichier temporaire qui n'entrera pas en collision avec celui qui existe déjà. Assurez-vous de déplacer ou de supprimer le fichier lorsque vous avez terminé, sinon vous remplissez le disque dur avec des fichiers temporaires.

0

Vérifiez si le problème se produit uniquement lorsque vous copiez des fichiers sur votre environnement de production au lieu de les télécharger. Les fichiers copiés peuvent avoir des périmètres plus restrictifs, refusant l'accès au processus dans lequel votre application s'exécute. Lorsque vous essayez d'écraser un tel fichier en en téléchargeant un autre avec le même nom, l'exception ci-dessus est levée.

La solution serait de télécharger uniquement les fichiers directement via votre application et de définir les autorisations nécessaires directement aux explicitement les fichiers que vous copiez de votre env test.

0

Cela peut aussi signifier que le fichier a été verrouillé par un autre processus. par exemple. deux fichiers téléchargés avec le même nom en même temps. Ou un autre processus utilise le fichier que vous essayez d'écraser.

0

Ce qui n'a pas été mentionné est si votre application Web est Internet public ou intranet privé, et en utilisant l'authentification Windows? Dans une telle situation, cela pourrait être le cas des utilisateurs autorisés (via des autorisations NTFS) à télécharger vers ce dossier alors que d'autres ne le font pas. Ils sont authentifiés par leurs comptes d'utilisateurs à la place du SERVICE NETWORK anonyme ou d'un autre compte utilisé pour le pool d'applications IIS.

Questions connexes