![](/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.