Blob URL (อ้างอิงW3Cชื่ออย่างเป็นทางการ) หรือ Object-URL (อ้างอิงMDNและชื่อเมธอด) ใช้กับBlobหรือวัตถุไฟล์
src = "blob: https: //crap.crap " ฉันเปิด URL ของ blob ที่อยู่ใน src ของวิดีโอมันมีข้อผิดพลาดและฉันไม่สามารถเปิดได้ แต่ทำงานกับแท็ก src ว่าเป็นไปได้อย่างไร
Blob URL สามารถสร้างได้ภายในเบราว์เซอร์เท่านั้น URL.createObjectURL()
จะสร้างการอ้างอิงพิเศษไปยังวัตถุ Blob หรือไฟล์ซึ่งสามารถนำออกใช้ในURL.revokeObjectURL()
ภายหลัง URL เหล่านี้สามารถใช้ได้ภายในเครื่องเดียวในเบราว์เซอร์เดียวและในเซสชันเดียวกัน (เช่นอายุการใช้งานของหน้า / เอกสาร)
URL หยดคืออะไร
ทำไมถึงใช้งาน
Blob URL / Object URL เป็นโปรโตคอลหลอกที่อนุญาตให้ใช้วัตถุ Blob และ File เป็นแหล่ง URL สำหรับสิ่งต่าง ๆ เช่นรูปภาพลิงก์ดาวน์โหลดข้อมูลไบนารีและอื่น ๆ
ตัวอย่างเช่นคุณไม่สามารถส่งอิมเมจวัตถุดิบ byte-data เพราะมันจะไม่รู้ว่าจะทำอย่างไรกับมัน มันต้องการตัวอย่างรูปภาพ (ซึ่งเป็นข้อมูลไบนารี) ที่จะโหลดผ่าน URL สิ่งนี้ใช้ได้กับทุกสิ่งที่ต้องการ URL เป็นแหล่งที่มา แทนที่จะอัปโหลดข้อมูลไบนารีจากนั้นให้บริการข้อมูลกลับผ่าน URL จะเป็นการดีกว่าหากใช้ขั้นตอนในพื้นที่พิเศษเพื่อให้สามารถเข้าถึงข้อมูลได้โดยตรงโดยไม่ต้องผ่านเซิร์ฟเวอร์
นอกจากนี้ยังเป็นทางเลือกที่ดีกว่าที่จะข้อมูล URI ซึ่งเป็นสตริงเข้ารหัสเป็นฐาน-64 ปัญหาของ Data-URI คือถ่านแต่ละตัวใช้เวลาสองไบต์ใน JavaScript ยิ่งไปกว่านั้น 33% จะถูกเพิ่มเนื่องจากการเข้ารหัส Base-64 Blobs เป็นไบนารี่ไบท์อาร์เรย์ที่ไม่มีค่าใช้จ่ายที่สำคัญเช่นเดียวกับ Data-URI ซึ่งทำให้เร็วขึ้นและเล็กลงในการจัดการ
ฉันสามารถสร้าง URL ของตัวเองบนเซิร์ฟเวอร์ได้หรือไม่?
ไม่ได้ URL ของ Blob / URL วัตถุสามารถทำได้ภายในเบราว์เซอร์เท่านั้น คุณสามารถสร้าง Blobs และรับวัตถุไฟล์ผ่าน File Reader API ได้แม้ว่า BLOB จะหมายถึง Binary Large OBject และถูกจัดเก็บเป็นไบต์อาร์เรย์ ลูกค้าสามารถร้องขอข้อมูลที่จะส่งเป็น ArrayBuffer หรือเป็น Blob เซิร์ฟเวอร์ควรส่งข้อมูลเป็นข้อมูลไบนารีแท้ ฐานข้อมูลมักจะใช้ Blob เพื่ออธิบายวัตถุไบนารีเช่นกันและในสาระสำคัญเรากำลังพูดถึงพื้นฐานเกี่ยวกับไบต์อาร์เรย์
หากคุณมีรายละเอียดเพิ่มเติมแล้ว
คุณต้องแค็ปซูลข้อมูลไบนารีเป็นวัตถุ BLOB จากนั้นใช้URL.createObjectURL()
เพื่อสร้าง URL ท้องถิ่นสำหรับมัน:
var blob = new Blob([arrayBufferWithPNG], {type: "image/png"}),
url = URL.createObjectURL(blob),
img = new Image();
img.onload = function() {
URL.revokeObjectURL(this.src); // clean-up memory
document.body.appendChild(this); // add image to DOM
}
img.src = url; // can now "stream" the bytes
โปรดทราบว่าURL
อาจนำหน้าใน webkit-browser เพื่อใช้
var url = (URL || webkitURL).createObjectURL(...);