2008-12-02 47 views
8

我有一個ASP.NET的Web應用程序,它具有以下功能:ASP.NET信息:System.UnauthorizedAccessException - 訪問路徑被拒絕

  1. 讀取Excel文件。
  2. 該excel文件將有一個圖像URL位於它指向互聯網上的某個地方。
  3. 該程序讀取每個圖像的URL並將其存儲到Web服務器的臨時文件夾中。
  4. 然後應用程序調整大小(更改圖像的寬度和高度)。
  5. 最後,應用程序會將該圖像保存到另一個文件夾。

    我得到以下異常:

System.Net.WebException:一個異常 一個Web客戶端請求期間發生。 ---> System.UnauthorizedAccessException: 訪問路徑 '\ abcserver \ target03 \ 3111 \ 35644 \ www.testing.com \ web \ content \ images \ TempStorage \ tempImage.jpg' 被拒絕。在 System.IO .__ Error.WinIOError(的Int32 的errorCode,字符串maybeFullPath)在 System.IO.FileStream.Init(字符串路徑, 的FileMode模式,FileAccess的訪問, 的Int32權利,布爾useRights, 文件共享份額,緩衝區大小的Int32 , FileOptions選項, SECURITY_ATTRIBUTES secAttrs,字符串 MSGPATH,布爾bFromProxy)在 System.IO.FileStream..ctor(字符串 路徑,的FileMode模式,FileAccess的 訪問)在 System.Net.WebClient.DownloadFile(URI 地址,字符串文件名)---結束內部異常堆棧跟蹤 ---
在ProcessImage.GetFileFromUrl(字符串 imageFileUrl,字符串newFileName)
在 uploadexceldata.UploadExcelData(字符串 文件名)

foreach (DataRow dr in dt.Rows) // Reading each excel row 
      { 

       if (dr[0].ToString() != "") 
       { 
        id= ""; 
        path = ""; 
        manuId = ""; 


        id= dr[0].ToString(); 
        path = dr[1].ToString(); 
        fileNameOnly = iProImg.GetFileNameOnly(path); 
        objDb.openConnection(); 
        strSqlGroupInfo = "select ManufacturerID from manufacturers where id='" + id+ "'"; 

        dTblManu = objDb.BuildDT(strSqlGroupInfo); // To Fill data to Datatable 
        objDb.closeConnection(); 
        if (dTblManu.Rows.Count > 0) 
        { 
         manuId = dTblManu.Rows[0][0].ToString(); 
        } 

        if (manuId != "") 
        { 
         tempUploadPath = "images/TempStorage/"; 
         tempUploadPath = Server.MapPath(tempUploadPath); 
         if (!Directory.Exists(tempUploadPath)) 
         { 
          Directory.CreateDirectory(tempUploadPath); 
         } 
         tempFilePath = tempUploadPath + "\\tempImage.jpg"; 
         tempFilePath = tempFilePath.Replace("/", "\\"); 

         previewPath = Server.MapPath("images/previews/" + manuId); 
         thumbNailPath = Server.MapPath("images/thumbnails/" + manuId); 

         if (!Directory.Exists(previewPath)) 
         { 
          Directory.CreateDirectory(previewPath); 
         } 
         if (!Directory.Exists(thumbNailPath)) 
         { 
          Directory.CreateDirectory(thumbNailPath); 
         } 
         fileNameOnly = "\\preview" + id+ ".jpg"; 
         fileNameOnly = fileNameOnly.Replace("/", "\\"); 
         previewPath = previewPath + fileNameOnly; 
         tempPartialPathP = "images\\previews\\" + manuId + fileNameOnly; 

         fileNameOnly = "\\thumbnail" + id+ ".jpg"; 
         thumbNailPath = thumbNailPath + fileNameOnly; 
         tempPartialPathT = "images\\thumbnails\\" + manuId + fileNameOnly; 


         try 
         { 

          iProImg.GetFileFromUrl(path, tempFilePath); 
          rowCounter++; 
          iProImg.ReSizeImage(tempFilePath, previewPath, previewSize); 
          iProImg.ReSizeImage(previewPath, thumbNailPath, thumbNailSize); 

         } 
         catch (Exception ec) 
         { 

          errorRowCount++; 
          iLog.LogErrorToFile("uploadExcel", ec.ToString(), "path : " + path + ",tempFilePath :" + tempFilePath); 


         } 
         finally 
         { 
          if(File.Exists(tempFilePath)) 
          { 
          File.Delete(tempFilePath); 
          } 
         } 
        } // If manuid!="" 
       } //if (dr[0].ToString() != "") 

有沒有人對如何解決這個例外有什麼建議?

回答

8

嘗試從讀取/保存文件的位置爲.Net用戶設置「完全控制」的訪問權限。

+0

任何爲.NET用戶設置「完全控制」權限的腳本? – Kiquenet 2011-11-22 11:00:07

+0

我有同樣的問題 - 這是我的臨時目錄,沒有適當的權限... – bgmCoder 2012-07-02 22:54:13

3

確保ASP.NET帳戶對您要寫入的文件夾(基本Windows安全性)具有讀/寫權限。
如何: http://www.microsoft.com/windowsxp/using/networking/security/permissions.mspx
(第4步,選中複選框,然後點擊OK

[編輯]
你需要自己與遠程服務器上已知的帳戶進行身份驗證。您可能授予了遠程服務器上本地ASP.NET帳戶的權限,這將不起作用,因爲這不是您從(從Web服務器)訪問該文件夾的用戶。
[/編輯]

+0

這是一個遠程服務器和文件夾具有完全讀/寫權限授予。仍然無法正常工作 – Shyju 2008-12-02 10:52:30

3

在回答什麼是說:「這是一個遠程服務器和文件夾有完全的讀/寫權限granted.Still不工作」

確保淨用戶/機帳戶用戶擁有該文件夾的完整權限。

此外,添加<身份/>到您的配置文件

3

上述所有的,再加上你可能需要添加這個標籤:

<identity impersonate="true" userName="accountname" password="password" /> 

閱讀本KB article,如果你是從瀏覽器進入將iis分配給文件共享,這會算作兩跳,現在您需要配置Kerberos委派。比我更聰明的系統管理員嘗試配置kerberos delegation並失敗。移動您的圖像或您的IIS實例,以便它們在同一臺計算機上。

3

首先,通過臨時授予每個人對該特定路徑的完全權限來縮小您的問題範圍。如果它有效,那麼你知道這是一個簡單的權限問題,你只需要弄清楚哪個acct需要適當的權限。可能是匿名用戶帳戶(在IIS Admin中仔細檢查此設置)而不是ASP.NET帳戶。 (不要忘記爲每個人提供權限)

如果您需要,我相信您可以使用FileMon查看哪個帳戶試圖訪問特定文件。可能是錯誤的,我有一段時間沒有使用這個工具。

最後一件事情是......文件上設置了只讀標誌嗎? :)

1

檢查您寫入tempStorage的映像文件(jpg)是否具有適用於webuser帳戶(aspnet或iis_wpg)的權限。您可以設置TempStorage目錄以替換所有子對象上的permisson條目。

  1. 右鍵點擊TempStorage文件夾並選擇屬性
  2. 選擇安全選項卡(確保正確的讀/寫/修改任何權限在此)
  3. 單擊高級按鈕
  4. 檢查第二個複選框 - 更換權限所有具有此處顯示的條目的子對象條目適用於子對象。

現在,您添加到TempStoreage文件夾的所有文件都將繼承允許您的webuser帳戶讀取jpg文件的權限。

3

今天我的確有同樣的問題。花了數小時試圖追查是什麼導致了這個問題後,我發現正在寫入的文件夾的權限不正確。從本質上講,該文件夾是從用戶創建文件的角度讀取的。

嘗試做有問題的文件夾中的以下內容:

  1. 右鍵單擊該文件夾並選擇屬性
  2. 單擊共享選項卡,然後單擊權限按鈕
  3. 確保添加無論用戶將要寫入文件夾的權限如何
  4. 回到屬性頁面,單擊安全選項卡
  5. 確保將任何用戶將寫入t他文件夾權限這樣做

看到這個問題被問了6個月前,我假設你已經解決了這個問題......但我只是想我會記錄我的解決方案,以防萬一當他們試圖找出如何解決這個UnauthorizedAccessException時,它對未來的其他人有用。

4

世界上沒有一個答案解決了這個對我,直到我無意中發現答案自己:

聯合國加密的文件

您可以授予整個硬盤驅動器上的完全權限給大家,它仍然不允許ASP.NET解密文件。

如果您確定該文件未加密,那麼您只需將ASPNET帳戶添加到您要訪問的文件或文件夾即可。但請確保它的第一個不加密!

1

而不是授予ASPNET用戶權限,授予NETWORK SERVICE用戶權限。該文件夾內的修改權限應該是足夠了,沒有必要給予充分的權限(無故給予更多的權限比需要)

瞭解更多詳情閱讀論壇:http://forums.asp.net/t/1013434.aspx/1

0

錯誤是很明顯那裏的路徑訪問'bin \ myprojname.pdb \'被拒絕。運行Web控制檯進程的用戶(不是在webconsole中創建的用戶,實際的Windows用戶),很可能「網絡服務」不具有該文件夾的權限。

您可以 - 右鍵單擊​​該文件夾,GOTO語句的權限,並添加「網絡服務」用戶 - 右鍵單擊​​該文件夾,GOTO語句的權限,並添加「所有人」用戶

應該解決這個問題。