2010-07-24 82 views
0

我遇到的問題是當我編譯和本地運行它工作正常(即這個「file.FileName」給我的文件與路徑的文件名)但是當我運行與本地IIS相同的代碼它不工作(即這個「file.FileName」只給我的文件名)。任何人都可以告訴我發生了什麼事。張貼的文件無法獲取文件名的路徑

 foreach (string inputTagName in Request.Files) 
     { 
      HttpPostedFileBase file = Request.Files[inputTagName]; 
      //File file; 
      if (file.ContentLength > 0) 
      { 
       string FilePath = file.FileName; 
       .......... 
      } 
      ........ 
     } 

回答

1

MSDN說:

當在派生類中重寫時,獲取客戶端上的文件的全名。

如果你想保存文件,以下可能會有所幫助,在if檢查中。

var filename = Path.Combine(Request.MapPath("~/App_Data"), Path.GetFileName(file.FileName)); 
file.SaveAs(filename); 
0

當你在本地說,我假設你直接從VS IDE運行應用程序。您還沒有提及您使用的VS IDE版本,無論是VS 2005/2008/2010。我還假設您將使用這些開發環境之一。

如果是這樣,當您在本地運行時,VS將使用內置的cassini服務器來訪問文件系統。當你部署網站時,它將使用IIS。由於cassini服務器以與VS相同的身份運行,因此它可能能夠訪問該文件。

當您嘗試使用IIS執行相同操作時,可能會因爲它在服務帳戶下運行而失敗。您必須將讀取的7個寫入權限明確地從您嘗試在Web服務器上讀取或寫入的文件夾中提供。

如果您使用Windows 2008服務器,則需要檢查是否正在使用網絡或網絡服務帳戶來運行IIS進程。對於較老的操作系統,它將是ASPNET帳戶,需要對物理文件夾的權限。