簡體   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