繁体   English   中英

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

[英]ASP.NET : Intermittent 'Access Denied' Error When Uploading Files

我有一个.NET程序,可以将图像上传到Web服务器。 我正在使用ASP.NET文件上传控件来做到这一点。 该程序可以在我的本地环境中正常运行,但是当我在Web服务器上运行它时,出现以下错误:

>     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快速搜索确认这是一个权限问题; 但是由于它只是间歇性发生,因此我没有诊断如何解决它的计划。

我的问题是:我应该怎么做才能诊断和解决此问题?

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

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

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

这也可能意味着文件已被另一个进程锁定。 例如,同时上传两个具有相同名称的文件。 或者另一个进程正在使用您要覆盖的文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM