บทนำ ในหลายกรณี เราจำเป็นต้องบันทึกรูปภาพลงในฐานข้อมูล ในบางแอปพลิเคชัน มีข้อมูลที่ละเอียดอ่อนบางอย่างที่ไม่สามารถจัดเก็บไว้ในระบบไฟล์ได้ เนื่องจากผู้ใช้สามารถรับรูปภาพที่จัดเก็บไว้ในระบบไฟล์อย่างผิดกฎหมายได้อย่างง่ายดาย
บทความนี้จะกล่าวถึงวิธีการบันทึกรูปภาพลงในฐานข้อมูล SQL SERVER ใน ASP.NET
ในบทความนี้ เราจะเรียนรู้เกี่ยวกับประเด็นต่อไปนี้:
ข้อกำหนดสำหรับการอัพโหลดไฟล์ภาพ
l การใช้วัตถุ Strem
l รับขนาดและประเภทของภาพที่อัพโหลด
l วิธีการใช้วิธี InputStream?
ข้อกำหนดสำหรับการอัพโหลดไฟล์ภาพ ก่อนที่เราจะเริ่มอัพโหลด เราต้องทำสองสิ่งที่สำคัญ
แอตทริบิวต์ enctype ของแท็ก #Form จำเป็นต้องตั้งค่าเป็นรูปแบบต่อไปนี้:
enctype="หลายส่วน/แบบฟอร์มข้อมูล"
#จัดเตรียมการควบคุม Html ที่อนุญาตให้ผู้ใช้เลือกไฟล์รูปภาพ:
<ประเภทอินพุต=ไฟล์>
#Also อ้างอิงเนมสเปซ System.IO เพื่อประมวลผลออบเจ็กต์ Strem ต้องใช้สามรายการข้างต้นกับเพจ aspx นอกจากนี้ยังมีข้อกำหนดต่อไปนี้ใน SQL SERVER:
#A ตารางที่มีรูปภาพประเภทฟิลด์อย่างน้อยหนึ่งรายการ
#นอกจากนี้ จะดีกว่าถ้ามีฟิลด์ประเภท Varchar เพื่อใช้ในการจัดเก็บประเภทรูปภาพ จากนั้น เรามีตารางข้อมูลที่มีประเภทฟิลด์รูปภาพและ <input type=file> (การควบคุมไฟล์ HTML) นอกจากนี้เรายังต้องมีปุ่มส่งที่ผู้ใช้สามารถคลิกได้หลังจากเลือกรูปภาพแล้ว ในเหตุการณ์ OnClick ของปุ่ม เราจำเป็นต้องได้รับเนื้อหาของไฟล์รูปภาพ และสุดท้ายก็แทรกลงในตารางข้อมูล มาดูเหตุการณ์ OnClick ของปุ่ม ซึ่งจะอ่านรูปภาพและแทรกลงในตารางข้อมูล
ปุ่มส่งรหัสเหตุการณ์ OnClick
http://blog.downcodes.com/
หรี่ intImageSize เป็น Int64
Dim strImageType As String
Dim ImageStream As Stream
' รับขนาดของรูปภาพ
intImageSize = PersonImage.PostedFile.ContentLength
' รับประเภทรูปภาพ
strImageType = PersonImage.PostedFile.ContentType
' อ่านรูปภาพ
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent (intImageSize) เป็นไบต์
Dim intStatus เป็นจำนวนเต็ม
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
' สร้างอินสแตนซ์ของการเชื่อมต่อและวัตถุคำสั่ง
หรี่ myConnection เป็น SqlConnection ใหม่ (ConfigurationSettings.AppSettings ("ConnectionString"))
Dim myCommand As New SqlCommand("sp_person_isp", myConnection)
' ทำเครื่องหมายคำสั่งเป็น SPROC
myCommand.CommandType = CommandType.StoredProcedure
' เพิ่มพารามิเตอร์ให้กับ SPROC
Dim prmPersonImage เป็น SqlParameter ใหม่("@PersonImage", SqlDbType.Image)
prmPersonImage.Value = เนื้อหารูปภาพ
myCommand.Parameters.Add(prmPersonImage)
หรี่ prmPersonImageType เป็น SqlParameter ใหม่("@PersonImageType", SqlDbType.VarChar, 255)
prmPersonImageType.Value = strImageType
myCommand.Parameters.Add(prmPersonImageType)
ลอง
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.ปิด()
Response.Write("เพิ่มคนใหม่เรียบร้อยแล้ว!")
จับ SQLexc เป็น SqlException
Response.Write("การแทรกล้มเหลว รายละเอียดข้อผิดพลาดคือ: " & SQLexc.ToString())
สิ้นสุดการลอง
มันทำงานอย่างไร?
วัตถุ PersonImage คือตัวควบคุม HTMLInputFile ก่อนอื่น เราต้องได้ขนาดของภาพที่แทรก ซึ่งสามารถทำได้โดยวิธีการต่อไปนี้:
intImageSize = PersonImage.PostedFile.ContentLength
ถัดไป คุณต้องรับประเภทรูปภาพผ่านคุณสมบัติ ContentType สิ่งสุดท้ายและสำคัญที่สุดคือการรับสตรีมไฟล์รูปภาพซึ่งทำได้โดยวิธีการต่อไปนี้:
ImageStream = PersonImage.PostedFile.InputStream
เรามี ImageContent อาร์เรย์ไบต์ซึ่งพร้อมที่จะใช้ในการบันทึกเนื้อหารูปภาพ รูปภาพทั้งหมดถูกอ่านผ่านวิธีการอ่านของออบเจ็กต์ Stream วิธีนี้มีพารามิเตอร์สามตัว ได้แก่:
#ตำแหน่งเป้าหมายของเนื้อหาภาพที่คัดลอก
#ตำแหน่งเริ่มต้นการอ่าน
#หมวดย่อยที่ต้องอ่านมีประกาศดังนี้
intStatus = ImageStream.Read (ImageContent, 0, intImageSize)
ตอนนี้เราอ่านเนื้อหารูปภาพทั้งหมดแล้ว ต่อไปเราจำเป็นต้องแทรกเนื้อหารูปภาพลงในตารางข้อมูล SQL เราจะใช้ขั้นตอนการจัดเก็บเพื่อแทรกประเภทรูปภาพและรูปภาพลงในตารางข้อมูล SQL หากคุณเห็นรายการโค้ดด้านบน คุณจะรู้ว่าเราได้ตั้งค่าประเภทข้อมูลเป็น SqlDbType.Image ด้วยวิธีนี้ เราจึงสามารถบันทึกรูปภาพลงในฐานข้อมูล SQL SERVER ได้สำเร็จ