ส่วนนี้จะอธิบายสองวิธีที่ใช้ใน ASP.NET เพื่ออัพโหลดไฟล์ไปยังเว็บเพจ
ASP.NET มีตัวควบคุมสองตัวที่อนุญาตให้ผู้ใช้สามารถอัพโหลดไฟล์ไปยังเว็บเซิร์ฟเวอร์ได้ เมื่อเซิร์ฟเวอร์ยอมรับข้อมูลไฟล์ที่อัพโหลด แอปพลิเคชันจะสามารถบันทึก ตรวจสอบ หรือเพิกเฉยได้ การควบคุมถัดไปอนุญาตให้อัปโหลดไฟล์:
HtmlInputFile - การควบคุมเซิร์ฟเวอร์ HTML
FileUpload - การควบคุมเว็บ ASP.NET
ตัวควบคุมทั้งสองอนุญาตให้อัปโหลดไฟล์ได้ แต่ตัวควบคุม FileUpload จะตั้งค่ารูปแบบการเข้ารหัสโดยอัตโนมัติ ในขณะที่ตัวควบคุม HtmlInputFile ไม่อนุญาต
ในบทช่วยสอนนี้ เราจะใช้การควบคุม FileUpload การควบคุมนี้ช่วยให้ผู้ใช้สามารถดูตัวอย่างไฟล์ที่เลือกที่จะอัปโหลดได้ โดยมีปุ่มแสดงตัวอย่างและกล่องข้อความที่สามารถป้อนชื่อไฟล์ได้
เมื่อผู้ใช้ป้อนชื่อไฟล์ในกล่องข้อความหรือแสดงตัวอย่างไฟล์ เมธอด SaveAs ของตัวควบคุม FileUpload จะบันทึกไฟล์ลงในฮาร์ดดิสก์
ไวยากรณ์พื้นฐานของ FileUpload มีดังนี้:
<asp:FileUpload ID= "Uploader" runat = "server" />
คลาส FileUpload มาจากคลาส WebControl และสืบทอดองค์ประกอบทั้งหมด คลาส FileUpload มีคุณสมบัติแบบอ่านอย่างเดียวเหล่านี้:
คุณสมบัติ | อธิบาย |
---|---|
ไฟล์ไบต์ | ส่งกลับชุดของรหัสไบต์สำหรับไฟล์ที่จะอัปโหลด |
ไฟล์เนื้อหา | ส่งกลับวัตถุกระแสของไฟล์ที่จะอัปโหลด |
ชื่อไฟล์ | ส่งกลับชื่อของไฟล์ที่จะอัปโหลด |
มีไฟล์ | ตรวจสอบว่าตัวควบคุมมีไฟล์ที่จะอัปโหลดหรือไม่ |
โพสต์ไฟล์ | ส่งคืนการอ้างอิงไปยังไฟล์ที่อัปโหลด |
ไฟล์ที่เผยแพร่ถูกห่อหุ้มไว้ในออบเจ็กต์ในรูปแบบของ HttpPostedFile ซึ่งสามารถเข้าถึงได้ผ่านคุณสมบัติ PostFile ของคลาส FileUpload
คลาส HttpPostedFile มีคุณสมบัติที่ใช้กันทั่วไปดังต่อไปนี้:
คุณสมบัติ | อธิบาย |
---|---|
เนื้อหาความยาว | ส่งกลับขนาดไบต์ของไฟล์ที่อัพโหลด |
ประเภทเนื้อหา | ส่งกลับประเภท MIME ของไฟล์ที่อัปโหลด |
ชื่อไฟล์ | ส่งกลับชื่อเต็มของไฟล์ |
อินพุตสตรีม | ส่งกลับวัตถุกระแสของไฟล์ที่จะอัปโหลด |
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการควบคุม FileUpload และคุณสมบัติของมัน แบบฟอร์มนี้มีตัวควบคุม FileUpload ตลอดจนปุ่มบันทึกและตัวควบคุมป้ายกำกับพร้อมชื่อไฟล์ ประเภท และความยาวจริง
ในโหมดออกแบบ ตารางจะมีลักษณะดังนี้:
รหัสไฟล์ที่เกี่ยวข้องแสดงอยู่ด้านล่าง:
<body> <form id="form1" runat="server"> <div> <h3> File Upload:</h3> <br /> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /><br /> <asp:Button ID="btnsave" runat="server" onclick="btnsave_Click" Text="Save" /> <br /><br /> <asp:Label ID="lblmessage" runat="server" /> </div> </form></body>
รหัสสำหรับปุ่มบันทึกแสดงอยู่ด้านล่าง:
protected void btnsave_Click(object sender, EventArgs e){ StringBuilder sb = new StringBuilder(); if (FileUpload1.HasFile) { try { sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName); //saving the file FileUpload1.SaveAs("<c:\SaveDirectory>" + FileUpload1.FileName); //Showing the file information sb.AppendFormat("<br/> Save As: {0}", FileUpload1.PostedFile.FileName); sb.AppendFormat("<br/> File type: {0}", FileUpload1.PostedFile.ContentType); sb.AppendFormat("<br/> File length: {0}", FileUpload1.PostedFile.ContentLength); sb.AppendFormat("<br/> File name: {0}", FileUpload1.PostedFile.FileName); }catch (Exception ex) { sb.Append("<br/> Error <br/>"); sb.AppendFormat("Unable to save file <br/> {0}", ex.Message); } } else { lblmessage.Text = sb.ToString(); }}
ให้ความสนใจกับประเด็นต่อไปนี้:
คลาส StringBuilder ถูกสร้างขึ้นจากเนมสเปซ System.IO ดังนั้นจึงควรรวมไว้ด้วย
พื้นที่ลองและจับถูกใช้เพื่อตรวจจับข้อผิดพลาดและแสดงข้อความแสดงข้อผิดพลาด