Что такое BLOB URL и почему он используется?
у меня очень много проблем с BLOB URL.
искал src видео тег на YouTube и я обнаружил, что видео src было так:
src="blob:https://crap.crap"
Я открыл BLOB URL, который был в src видео он дал ошибку, и я не могу открыть, но работал с src тег. Как такое возможно?
требования:
- что такое URL-адрес BLOB-объектов?
- почему он используется?
- могу ли я сделать свой собственный blob URL на сервере?
- если у вас есть дополнительные детали
спасибо заранее
4 ответа:
что такое URL-адрес BLOB-объектов? Почему он используется?
BLOB - это просто последовательность байтов. Браузер распознает его как поток байтов. Он используется для получения потока байтов из источника.
объект Blob представляет собой файлоподобный объект неизменяемых необработанных данных. Большие двоичные объекты представляют данные, которые не обязательно имеют собственный формат JavaScript. Интерфейс файла основан на Blob, наследуя функциональность blob и расширяя его для поддержки файлов на компьютере пользователя система.
могу ли я сделать свой собственный Blob url на сервере?
Да вы можете есть серверные способы сделать это например попробуйте http://php.net/manual/en/function.ibase-blob-echo.php
подробнее о
эта функция JavaScript хочет показать разницу между Blob FileAPI, и сведения api для загрузки JSON файл в браузере клиента:
/** * Save a text as file using HTML <a> temporary element and Blob * @author Loreto Parisi */ var saveAsFile = function(fileName,fileContents) { if(typeof(Blob)!='undefined') { // using Blob var textFileAsBlob = new Blob([fileContents], { type: 'text/plain' }); var downloadLink = document.createElement("a"); downloadLink.download = fileName; if (window.webkitURL != null) { downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); } else { downloadLink.href = window.URL.createObjectURL(textFileAsBlob); downloadLink.onclick = document.body.removeChild(event.target); downloadLink.style.display = "none"; document.body.appendChild(downloadLink); } downloadLink.click(); } else { var pp = document.createElement('a'); pp.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileContents)); pp.setAttribute('download', fileName); pp.onclick = document.body.removeChild(event.target); pp.click(); } }//saveAsFileназывали
saveAsFile('out.json',jsonString);создаст ByteStream сразу распознается браузером, который будет загружать сгенерированный файл непосредственно с помощью файла APIURL.createObjectURL. Вelseможно увидеть тот же результат получен черезhrefэлемент плюс api данных, но это имеет несколько ограничений, чтоBlobAPI не./** * Save a text as file using HTML <a> temporary element and Blob * @author Loreto Parisi */ var saveAsFile = function(fileName, fileContents) { if (typeof(Blob) != 'undefined') { // using Blob var textFileAsBlob = new Blob([fileContents], { type: 'text/plain' }); var downloadLink = document.createElement("a"); downloadLink.download = fileName; if (window.webkitURL != null) { downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); } else { downloadLink.href = window.URL.createObjectURL(textFileAsBlob); downloadLink.onclick = document.body.removeChild(event.target); downloadLink.style.display = "none"; document.body.appendChild(downloadLink); } downloadLink.click(); } else { var pp = document.createElement('a'); pp.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileContents)); pp.setAttribute('download', fileName); pp.onclick = document.body.removeChild(event.target); pp.click(); } } //saveAsFile var jsonObject = { "name": "John", "age": 30, "car": null }; saveAsFile('out.json', JSON.stringify(jsonObject, null, 2));
Я изменил рабочее решение для обработки обоих случаев.. когда видео загружается и когда изображение загружается .. надеюсь, это поможет некоторым.
HTML-код продолжительность:
Javascript
var fileEl = document.querySelector("input"); fileEl.onchange = function(e) { var file = e.target.files[0]; // selected file if (!file) { console.log("nothing here"); return; } console.log(file); console.log('file.size-' + file.size); console.log('file.type-' + file.type); console.log('file.acutalName-' + file.name); let start = performance.now(); var mime = file.type, // store mime for later rd = new FileReader(); // create a FileReader if (/video/.test(mime)) { rd.onload = function(e) { // when file has read: var blob = new Blob([e.target.result], { type: mime }), // create a blob of buffer url = (URL || webkitURL).createObjectURL(blob), // create o-URL of blob video = document.createElement("video"); // create video element //console.log(blob); video.preload = "metadata"; // preload setting video.addEventListener("loadedmetadata", function() { // when enough data loads console.log('video.duration-' + video.duration); console.log('video.videoHeight-' + video.videoHeight); console.log('video.videoWidth-' + video.videoWidth); //document.querySelector("div") // .innerHTML = "Duration: " + video.duration + "s" + " <br>Height: " + video.videoHeight; // show duration (URL || webkitURL).revokeObjectURL(url); // clean up console.log(start - performance.now()); // ... continue from here ... }); video.src = url; // start video load }; } else if (/image/.test(mime)) { rd.onload = function(e) { var blob = new Blob([e.target.result], {type: mime}), url = URL.createObjectURL(blob), img = new Image(); img.onload = function() { console.log('image'); console.dir('this.height-' + this.height); console.dir('this.width-' + this.width); URL.revokeObjectURL(this.src); // clean-up memory console.log(start - performance.now());// add image to DOM } img.src = url; }; } var chunk = file.slice(0, 1024 * 1024 * 10); // .5MB rd.readAsArrayBuffer(chunk); // read file object };URL-адрес jsFiddle