asp.net3.5關於FileUpload控制項的一個注意點的思考

來源:互聯網
上載者:User
   最近在一個asp.net 3.5項目中需要用到FileUpload控制項讀取文字檔中的內容。我們正常的思路就是通過FileUpload控制項選取檔案,後台讀取FileUpload控制項顯示的絕對路徑,最後檔案類操作絕對路徑下的檔案。但是在選擇文字檔的時候,意外發現取不到檔案的完整路徑,只能取到檔案名稱(ie8和firefox3.0都一樣)。印象中asp.net2.0裡要取檔案完整路徑,只要UpLoadFile.PostedFile.FileName就可以了,但是現在為什麼會只取到檔案名稱呢?我大膽猜測可能是asp.net3.5下的一個bug。然後google一下,終於找到一篇比較靠譜的文章,也就是這篇。然後我滿懷信心地按照它給出的解決方案即Path.GetFileName(UpLoadFile.PostedFile.FileName)這樣的方法跟蹤調試了一下,我靠,檔案路徑竟然還是錯的。為什麼是錯的呢?我選擇案頭的一個文字檔,然後後台取的竟然將vs2008的d盤下的安裝檔案Common7檔案夾下面的一段路徑給取出來了(你可以親自試試看)。無語了,又google一陣無果後,得,換成html上傳控制項,麻利地寫了幾行JavaScript代碼,問題這次總算可以完美解決了吧,一調試,真是不敢相信啊,嗯...又發現一個新問題(可以查看這一篇文章,“fakepath”替代了具體某個盤符下的檔案夾路徑)。通過這兩篇文章,我們發現它們都是一致性的建立在瀏覽器的分析基礎之上,這本來無可厚非,而且按照第二篇文章的方法,設定好瀏覽器的安全選項後,問題確實解決了。但是我們還不滿足,如果普通使用者不知道瀏覽器的設定怎麼辦,或者知道需要設定瀏覽器安全性但是因為其他外在因素考慮放棄設定怎麼辦?難道要加說明,讓每個使用者在上傳檔案的時候都必須來修改自己的瀏覽器的設定?顯然不可取。其實我們還有一種變通的方式(針對伺服器控制項而言),很簡單,只要使用上傳控制項的FileBytes屬性,如下:

 byte[] data = this.fuControl.FileBytes; //fuControl 上傳控制項

接著將位元群組轉換成我們需要的字串就行了string txtContent = System.Text.Encoding.GetEncoding("GB2312").GetString(data, 0, data.Length); //位元組轉化為字串 

ps:這個轉換筆者只試過文字檔從二進位轉為字串,其他類型的檔案沒有試過。如果你要讀取其他類型的檔案內容,但是二進位檔案無法直接轉換為您需要的形式,請謹慎使用本文的方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.