![](/img/trans.png)
[英]Access denied when uploading files to folder using asp.net mvc 3?
[英]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.