【问题标题】:ASP.NET : Intermittent 'Access Denied' Error When Uploading FilesASP.NET:上传文件时出现间歇性“拒绝访问”错误
【发布时间】:2008-12-22 07:14:34
【问题描述】:

我有一个 .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()

快速谷歌搜索确认这是一个权限问题;但由于它只是间歇性发生,因此我没有计划来诊断如何修复它。

我的问题是:我应该如何诊断和解决这个问题?

【问题讨论】:

    标签: asp.net iis


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-11
            • 1970-01-01
            • 1970-01-01
            • 2022-08-02
            • 2012-08-30
            • 1970-01-01
            • 2019-06-21
            • 2013-08-08
            相关资源
            最近更新 更多