ASP.NET:上传文件时间歇性“访问被拒绝”错误

时间:2008-12-22 07:14:34

标签: asp.net iis

我有一个.NET程序可以将图像上传到网络服务器。我正在使用ASP.NET文件上传控件来执行此操作。该程序在我的本地环境中正常工作,但是当我在网络服务器上运行时,我收到以下错误:

>     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()

Google快速搜索确认这是一个权限问题;但由于它只是间歇性地发生,我没有计划诊断如何解决它。

我的问题是:如何诊断和解决此问题?

4 个答案:

答案 0 :(得分:2)

您是否为每个用户将文件上传到相同的文件名(从错误消息中看出这是这种情况)?如果是这样,那么就像Ady所说的那样。相反,使用Path.GetTempFileName为临时文件生成一个文件名,该文件名不会与已存在的文件冲突。确保在完成后移动或删除文件,否则你将用临时文件填满硬盘。

答案 1 :(得分:0)

检查在将文件复制到生产环境而不是上传文件时是否只出现问题。复制的文件可能具有更严格的限制,拒绝访问您的应用程序运行的进程。当您尝试通过上载另一个具有相同名称的文件来覆盖此类文件时,将抛出上述异常。

解决方案是仅通过您的应用程序直接上传文件,并将所需权限明确地设置为您从测试环境中复制的文件。

答案 2 :(得分:0)

这也可能意味着该文件已被其他进程锁定。例如两个文件同时上传同名。或者另一个进程正在使用您尝试覆盖的文件。

答案 3 :(得分:0)

未提及的是,您的Web应用程序是公共Internet还是专用Intranet,并使用 Windows身份验证?在这种情况下,可能是授权用户(通过NTFS权限)上传到该文件夹​​而其他用户不上载的情况。它们通过其用户帐户进行身份验证,而不是使用匿名NETWORK SERVICE或用于IIS应用程序池的其他帐户。