2010-11-19 114 views
1

我用文件HTML輸入而不是FileUpload Web Control。不要問爲什麼,但我只需要!從代碼中獲取文件的完整文件路徑HTML輸入

HTML:

<input type="file" id="image1" class="listUploadAdd" name="ImageAdd1" /> 

後面的代碼:

Dim ImageAdd1 As String = Request.Form("ImageAdd1").ToString() 

我從 「C:/Orange.jpg」 瀏覽上傳和結果的代碼背後僅僅是圖像名稱「Orange.jpg」,而不是完整的「C:/ Orange.jpg」,這是從本地驅動器上傳文件所需的。

什麼是從後面的代碼捕獲完整圖像路徑上傳到服務器上的最佳方式?

謝謝。

回答

2

您可以添加runat="server"到輸入元素嗎? :)然後,它是很容易的文件存儲到服務器

Request.Files("File1").SaveAs("c:\somedir\yourfile.txt") 

。如果你想在原來的文件名和路徑,試試這個:

Dim filename As string = Request.Files("File1").FileName 

要下載文件,而無需使用runat="server"屬性,可以這樣做:

Dim file = Request.Files("File1") 
Dim buf(file.ContentLength) As Byte 
file.InputStream.Read(buf, 0, file.ContentLength) 
IO.File.WriteAllBytes("C:\somedir\yourfile.txt", buf) 

但你必須設置enctype在HTML頁面表單元素上:

<form id="yourform" runat="server" enctype="multipart/form-data"> 
+0

不知道我沒做對。我得到這個錯誤「對象引用未設置爲對象的實例」。 「Dim filename As String = Request.Files(」image1「)。FileName」OR「Dim file As String = Request.Files(」ImageAdd1「)。FileName」。我也提到了同樣的表單屬性。真奇怪。 – 2010-11-19 05:33:26

+0

你能發佈完整的源代碼嗎? .aspx和代碼隱藏文件.. – 2010-11-19 05:57:09

+0

但正如@Michael Shimmins指出的,你真的不應該關心文件在客戶端機器上的位置。什麼是重要的,是你選擇將它存儲在你的服務器上的地方。 – 2010-11-19 06:44:33

1

我從「C:/Orange.jpg」瀏覽上傳和結果的代碼背後僅僅是形象的名字「Orange.jpg」,而不是完整的「C:/Orange.jpg」,這是需要從本地驅動器獲取文件才能上傳。

您將無法將文件從客戶機上取下。當你開發你的程序時,客戶端和服務器是同一臺機器,但是當你部署它時,服務器和客戶端將是不同的機器。當代碼執行後(在服務器上)時,如果您嘗試打開C:\ Orange.jpg,您將嘗試將其從服務器的硬盤上打開。該文件可能不存在。

當您從網頁上傳文件時,它將作爲POST消息的一部分發布到服務器。你可以從Form集合中取出這個文件。您不需要將上傳器轉換爲ASP.NET控件,或添加runat="server"屬性。只要您發佈包含輸入元素的表單,它就會提交給服務器。

該文件的內容將作爲一個字節數組存儲在表單中。您可以將該字節數組作爲文件保存在某處的服務器硬盤上。

總結:

你不需要知道路徑到客戶端的計算機上的文件,因爲你不能無論如何訪問它。使用作爲表單提交的一部分發布的文件數據,而不是將文件的副本保存在服務器上。

相關問題