Blob
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨Ð¸ÑÐ»Ñ 2015 г.â©.
* Some parts of this feature may have varying levels of support.
ÐбÑÐµÐºÑ Blob пÑедÑÑавлÑÐµÑ Ð¸Ð· ÑÐµÐ±Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñй ÑÐ°Ð¹Ð»Ñ Ð¾Ð±ÑÐµÐºÑ Ñ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½ÑемÑми, необÑабоÑаннÑми даннÑми; они могÑÑ ÑиÑаÑÑÑÑ ÐºÐ°Ðº ÑекÑÑ Ð¸Ð»Ð¸ двоиÑнÑе даннÑе, либо могÑÑ Ð±ÑÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² ReadableStream, Ñаким обÑазом, его меÑÐ¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки даннÑÑ
.
Blob-Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑедÑÑавлÑÑÑ Ð´Ð°Ð½Ð½Ñе, коÑоÑÑе не обÑзаÑелÑно Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð² Ñодном Ð´Ð»Ñ JavaScript ÑоÑмаÑе. ÐнÑеÑÑÐµÐ¹Ñ File оÑнован на Blob, наÑледÑÐµÑ ÑÑнкÑионалÑноÑÑÑ Blob и ÑаÑÑиÑÑÐµÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки Ñайлов на ÑÑоÑоне полÑзоваÑелÑ.
ÐÑполÑзование Blob
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Blob не из обÑекÑов и даннÑÑ
blob, иÑполÑзÑйÑе конÑÑÑÑкÑÐ¾Ñ Blob() . ЧÑÐ¾Ð±Ñ ÑоздаÑÑ blob из подмножеÑÑва даннÑÑ
из дÑÑгого blob, иÑполÑзÑйÑе меÑод slice(). ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾Ð±ÑÐµÐºÑ Blob Ð´Ð»Ñ Ñайла на Ñайловой ÑиÑÑеме полÑзоваÑелÑ, ÑмоÑÑиÑе докÑменÑаÑÐ¸Ñ Ð½Ð° File.
API, пÑинимаÑÑие обÑекÑÑ Blob, Ñакже пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² докÑменÑаÑии на File.
ÐÑимеÑание:
ÐеÑод slice() Ð¸Ð¼ÐµÐµÑ Ð¸Ð·Ð½Ð°ÑалÑно задаваемÑÑ Ð´Ð»Ð¸Ð½Ñ ÐºÐ°Ðº вÑоÑой аÑгÑменÑ, ÑÑо иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑиÑла Ð±Ð°Ð¹Ñ ÐºÐ¾Ð¿Ð¸ÑÑемÑÑ
в новÑй Blob. ÐÑли ÑказаÑÑ Ñакие паÑамеÑÑÑ start + length, коÑоÑÑе пÑевÑÑаÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸ÑÑ
одного Blob, Ñо возвÑаÑаемÑй Blob бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð´Ð°Ð½Ð½Ñе Ð¾Ñ Ð½Ð°ÑалÑного индекÑа (start index) до конÑа иÑÑ
одного Blob.
ÐÑимеÑание:
СледÑÐµÑ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ ,ÑÑо меÑод slice() Ð¸Ð¼ÐµÐµÑ ÑÑоÑонние пÑеÑикÑÑ Ð² некоÑоÑÑÑ
бÑаÑзеÑаÑ
: blob.mozSlice() Ð´Ð»Ñ Firefox 12 и Ñанее, Ñак же blob.webkitSlice() в Safari. СÑаÑÐ°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¼ÐµÑода slice(), без ÑÑоÑонниÑ
пÑиÑÑавок, Ð¸Ð¼ÐµÐµÑ Ð´ÑÑгой алгоÑиÑм и ÑÑÑаÑела. ÐоддеÑжка blob.mozSlice() бÑла ÑбÑана в Firefox 30.
ÐонÑÑÑÑкÑоÑ
Blob(blobParts[, options])-
ÐозвÑаÑÐ°ÐµÑ ÑоздаваемÑй обÑÐµÐºÑ Blob, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ñоединение вÑÐµÑ Ð´Ð°Ð½Ð½ÑÑ Ð² маÑÑиве, пеÑеданном в конÑÑÑÑкÑоÑ.
СвойÑÑва
Blob.isClosedТолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ ÐкÑпеÑименÑалÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ-
ÐогиÑеÑкое знаÑение, показÑваÑÑее, вÑзÑвалÑÑ Ð»Ð¸ меÑод
Blob.close()Ñ blob. ÐакÑÑÑÑй blob не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑоÑиÑан. Blob.sizeТолÑко Ð´Ð»Ñ ÑÑениÑ-
Ð Ð°Ð·Ð¼ÐµÑ Ð´Ð°Ð½Ð½ÑÑ , ÑодеÑжаÑÐ¸Ñ ÑÑ Ð² обÑекÑе
Blob, в байÑÐ°Ñ . Blob.typeТолÑко Ð´Ð»Ñ ÑÑениÑ-
СÑÑока Ñ MIME-Ñипом даннÑÑ , ÑодеÑжаÑÐ¸Ñ ÑÑ Ð²
Blob. ÐÑли Ñип неизвеÑÑен, ÑÑÑока пÑÑÑа.
ÐеÑодÑ
Blob.close()ÐкÑпеÑименÑалÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ-
ÐакÑÑÐ²Ð°ÐµÑ Blob обÑекÑ, по возможноÑÑи оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°Ñ Ð·Ð°Ð½ÑÑÑе им ÑеÑÑÑÑÑ.
Blob.slice([start[, end[, contentType]]])-
ÐозвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй
BlobобÑекÑ, ÑодеÑжаÑий даннÑе в Ñказанном диапазоне байÑов иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾Blob. Blob.stream()-
ÐозвÑаÑаеÑ
ReadableStream, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ ÑодеÑжимогоBlob. Blob.text()-
ÐозвÑаÑÐ°ÐµÑ promise, коÑоÑÑй иÑполнÑеÑÑÑ Ñ
USVString, ÑодеÑжаÑей вÑÑ ÑодеÑжимоеBlob, инÑеÑпÑеÑиÑÑемое как ÑекÑÑ UTF-8.
ÐÑимеÑÑ
>Создание Blob
ÐонÑÑÑÑкÑÐ¾Ñ Blob() constructor Ð¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ blob из дÑÑгиÑ
обÑекÑов. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ ÑконÑÑÑÑиÑоваÑÑ blob из ÑÑÑоки JSON:
const obj = { hello: "world" };
const blob = new Blob([JSON.stringify(obj, null, 2)], {
type: "application/json",
});
ÐÑедÑпÑеждение:
Ðо Ñого как конÑÑÑÑкÑÐ¾Ñ Blob ÑÑал доÑÑÑпен, ÑÑо могло бÑÑÑ Ð²Ñполнено ÑеÑез ÑÑÑаÑевÑий API BlobBuilder:
var builder = new BlobBuilder();
var fileParts = ['<a id="a"><b id="b">hey!</b></a>'];
builder.append(fileParts[0]);
var myBlob = builder.getBlob("text/xml");
Создание URL Ð´Ð»Ñ ÑодеÑжимого ÑипизиÑованного маÑÑива
СледÑÑÑий код ÑоздаÑÑ ÑипизиÑованнÑй маÑÑив JavaScript и ÑоздаÑÑ Ð½Ð¾Ð²Ñй Blob, ÑодеÑжаÑий даннÑе ÑипизиÑованного маÑÑива. ÐаÑем вÑзÑваеÑÑÑ URL.createObjectURL() Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ blob в URL.
HTML
<p>
This example creates a typed array containing the ASCII codes for the space
character through the letter Z, then converts it to an object URL. A link to
open that object URL is created. Click the link to see the decoded object URL.
</p>
JavaScript
ÐÑновной ÑаÑÑÑÑ ÑÑого кода Ð´Ð»Ñ Ð¿ÑимеÑа ÑвлÑеÑÑÑ ÑÑнкÑÐ¸Ñ typedArrayToURL(), коÑоÑÐ°Ñ ÑоздаÑÑ Blob из пеÑеданного ÑипизиÑованного маÑÑива и возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ URL Ð´Ð»Ñ Ð½ÐµÐ³Ð¾. ÐÑеобÑазовав даннÑе в URL обÑекÑа, иÑ
можно иÑполÑзоваÑÑ Ð½ÐµÑколÑкими ÑпоÑобами, в Ñом ÑиÑле, в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑа src ÑлеменÑов <img> (конеÑно, пÑи ÑÑловии, ÑÑо даннÑе ÑодеÑÐ¶Ð°Ñ Ð¸Ð·Ð¾Ð±Ñажение).
function typedArrayToURL(typedArray, mimeType) {
return URL.createObjectURL(new Blob([typedArray.buffer], { type: mimeType }));
}
const bytes = new Uint8Array(59);
for (let i = 0; i < 59; i++) {
bytes[i] = 32 + i;
}
const url = typedArrayToURL(bytes, "text/plain");
const link = document.createElement("a");
link.href = url;
link.innerText = "Open the array URL";
document.body.appendChild(link);
ÐÑÑгой пÑимеÑ
var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray], { type: "application/octet-binary" }); // pass a useful mime type here
var url = URL.createObjectURL(blob);
// url will be something like: blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
// now you can use the url in any context that regular URLs can be used in, for example img.src, etc.
ÐзвлеÑение даннÑÑ Ð¸Ð· Blob
Ðдин из ÑпоÑобов пÑоÑеÑÑÑ ÑодеÑжимое Blob â ÑÑо иÑполÑзоваÑÑ FileReader. СледÑÑÑий код ÑиÑÐ°ÐµÑ ÑодеÑжимое Blob как ÑипизиÑованнÑй маÑÑив.
var reader = new FileReader();
reader.addEventListener("loadend", function () {
// reader.result contains the contents of blob as a typed array
});
reader.readAsArrayBuffer(blob);
ÐÑÑгой ÑпоÑоб пÑоÑиÑаÑÑ ÑодеÑжимое из Blob â ÑÑо иÑполÑзоваÑÑ Response. СледÑÑÑий код ÑиÑÐ°ÐµÑ ÑодеÑжимое Blob как ÑекÑÑ:
const text = await new Response(blob).text();
Ðли можно иÑполÑзоваÑÑ Blob.text():
const text = await blob.text();
ÐÑполÑзÑÑ Ð´ÑÑгие меÑÐ¾Ð´Ñ FileReader, возможно пÑоÑеÑÑÑ ÑодеÑжимое обÑекÑа Blob как ÑÑÑÐ¾ÐºÑ Ð¸Ð»Ð¸ как URL.
СпеÑиÑикаÑии
| Specification |
|---|
| File API > # blob-section > |