2010-11-03 115 views
1

我有一個網頁,提示用戶使用fileupload控件的Excel文件。然後它使用OleDbConnection將文件讀入數據表中,然後使用該數據運行其他代碼。當我在Visual Studio中測試時,它工作正常。例如,我可以查找文件'g:\ myfiles \ upldtest.xls',它找到該文件,讀取它並且代碼正常工作。當我嘗試在我們的Web服務器上運行它時,在嘗試創建OleDBConnection時出現錯誤,它試圖創建OleDbConnection並且路徑'g:\ myfiles \ upldtest.xls'無效。ASP .NET無效路徑

我試圖使用ManagementObjectSearcher將連接字符串路徑轉換爲UNC(\\ MyDataServer \ myfiles而不是g:\ myfiles)。當我測試它時,它顯示了正確的路徑,但是當我將頁面上傳到Web服務器時,我仍然得到路徑'g:\ myfiles \ upldtest.xls'無效。

我用它來確定所需的文件的名稱是這個

串TNAME = FileUpload1.PostedFile.FileName的代碼; //文件名和路徑

string gname = tname.Substring(tname.LastIndexOf(「\\」)+ 1); //路徑名稱

任何想法我失蹤?我的合同要求我使用VS2005和.NET Framework 2.0,所以我不能使用任何新的東西。預先感謝您的幫助。

+0

權限問題? – brumScouse 2010-11-03 20:59:01

+0

我不這麼認爲,我得到了服務器上的故障,我想我有權限,除非......這是IIS 6的問題? – RT1138 2010-11-09 19:58:05

回答

2

HttpPostedFile.FileName返回客戶機上文件的全限定名稱。

需要調用SaveAs()實際的文件保存在服務器上:

using System.IO; 

string filename = Path.GetFileName(FileUpload1.PostedFile.FileName); 
string filepath = Path.Combine(@"X:\Your\Own\Upload\Folder", filename); 
FileUpload1.PostedFile.SaveAs(filepath); 

// Now use `filepath` as your data source. 

IIS可能已經寫入文件的臨時位置,以節省內存,但因爲你不能(和不應該」噸)訪問該位置,它沒有區別。

+0

對不起,延遲的答覆,並感謝您的答覆。我無法將文件傳輸到服務器上。我需要能夠將文件讀入內存並以此方式處理。大多數運行此操作系統的最終用戶將無權將文件上傳到服務器。 – RT1138 2010-11-09 20:00:11

1

你還應該知道跨瀏覽器的問題。 IE在文件上傳時將整個路徑發送到服務器,而Firefox/Chrome則不會。

+0

對於好的或壞的,我們只使用IE。感謝您的迴應。 – RT1138 2010-11-09 20:00:37