HttpPostedFile注意事項:
(1) HttpPostedFile提供對客戶端已上載的單獨文件的訪問。
(2) 對於客戶端已上載的文件,最好先保存到服務器,再訪問;而不是直接訪問。
(3) HttpPostedFile file = Request.Files[0]; 變量file只是對文件的引用,對file的任何操作都直接影響到已經上載的文件。
(4) 使用StreamReader 讀取文件后,要調用Close方法關閉文件流,否則SaveAs相同文件名時,提示文件被占用。
下面通過兩種方式訪問已經上載的文件。
一、先保存到服務器,再訪問。
1,新建一個test.aspx頁面,前台代碼如下:
<form runat="server" method="post" enctype="multipart/form-data"> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="btnAdd" runat="server" Text="上傳" /> </form>
效果圖如下:
2,后台代碼如下:
protected void Page_Load(object sender, EventArgs e) { //(0) 判斷文件是否存在 if (Request.Files.Count < 1) { return; } SaveToRead(); } // 1,先保存,再讀取文件 public void SaveToRead() { // (1)獲取上傳的文件,保存到 應用程序基目錄 HttpPostedFile file = Request.Files[0]; string sFileName = System.AppDomain.CurrentDomain.BaseDirectory + "上傳文件.txt"; file.SaveAs(sFileName); // (2)從服務器上讀取文件 StreamReader reader = new StreamReader(sFileName, Encoding.GetEncoding("GB2312")); string temp = reader.ReadLine(); Response.Write(temp); // (3)關閉文件流 reader.Close(); // (4)其他函數需要讀取時,從新加載文件 reader = new StreamReader(sFileName, Encoding.GetEncoding("GB2312")); temp = reader.ReadLine(); Response.Write(temp); }
3,運行效果圖如下:
二、 直接訪問客戶端上載的文件
1, 前台代碼不變,后台添加如下代碼:
protected void Page_Load(object sender, EventArgs e) { //(0) 判斷文件是否存在 if (Request.Files.Count < 1) { return; } SaveToRead(); ReadFile(); } //2,直接讀取上傳的文件 public void ReadFile() { //(1)將上傳的文件同時賦值給file1和file2 HttpPostedFile file1 = Request.Files[0]; HttpPostedFile file2 = Request.Files[0]; //(2)判斷文件為空的方法 if (file1 == null || file1.ContentLength == 0 || string.IsNullOrEmpty(file1.FileName)) { //文件為空,寫入日志 Response.Write("文件為空"); return; } //(3)獲取文件流的方法 Stream stream = file1.InputStream; StreamReader reader = new StreamReader(stream, Encoding.GetEncoding("GB2312")); //(4) 讀取文件內容的方法 string temp = reader.ReadLine(); //(5) 關閉文件流 reader.Close(); //(6) 查看file1和file2的長度均為0 Response.Write("file1的長度:" + file1.ContentLength + "; file2的長度:" + file2.ContentLength); }
2, 運行效果如下: