Рассматриваемый API умеет работать помимо файлов также с источниками, относящимися к другому типу и носящими название бинарных блоков (binary large object, blob). Бинарный блок — это объект, представляющий собой необработанные данные. Этот тип был создан для преодоления ограничений JavaScript на работу с двоичными данными. Обычно бинарный блок генерируется на основе файла, но так бывает не всегда. Это хороший способ работать с данными без необходимости загружать файл целиком в память, и он позволяет обрабатывать двоичную информацию небольшими фрагментами.
Существует несколько вариантов использования бинарных блоков, но главная их задача — обеспечивать эффективный способ обработки больших объектов сырых данных или больших файлов. Для создания бинарного блока на основе другого бинарного блока или файла в API предусмотрен метод slice(): slice(start, length, type). Этот метод возвращает новый бинарный блок, созданный на базе другого бинарного блока или файла. Первый атрибут указывает начальную точку, второй — длину нового бинарного блока, а третий представляет собой необязательный параметр, задающий тип данных.
Листинг 12.5. Работа с бинарными блоками
Function initiate(){
Databox=document. getElementById(‘databox’); var myfiles=document. getElementById(‘myfiles’); myfiles. addEventListener(‘change’, process, false);
}
Function process(e){
Var files=e. target. files;
Databox. innerHTML=»;
Var file=files[0];
Var reader=new FileReader();
Reader. onload=function(e){ show(e, file); };
Var blob=file. slice(0,1000);
Reader. readAsBinaryString(blob);
}
Function show(e, file){
Var result=e. target. result; databox. innerHTML=’Имя: ‘+file. name+'<br>’; databox. innerHTML+^Тип: ‘+file. type+'<br>’;
Databox. innerHTML+=’Pa3Mep: ‘+file. size+’ bytes<br>’; databox. innerHTML+=’Pa3Mep бинарного блока: ‘+result. length+’ bytes<br>’; databox. innerHTML+=’Бинарный блок: ‘+result;
}
Window. addEventListener(‘load’, initiate, false);
Из-за несовместимости с ранее существовавшими методами сейчас ведется разработка нового метода для замены slice. До тех пор, пока новый метод не появится, для тестирования кода из листинга 12.5 в последних версиях браузеров Firefox и Google Chrome вам нужно будет заменять название slice названиями, содержащими браузерные префиксы: mozSlice или webkitSlice соответственно. Для получения более подробной информации зайдите на наш веб-сайт и изучите ссылки для этой главы.
В коде из листинга 12.5 мы делаем то же самое, что делали раньше, но на этот раз вместо считывания файла целиком с помощью метода slice() создаем бинарный блок. Длина блока равна 1000 байт, а начинается он с нулевого байта файла. Если пользователь загружает файл размером менее 1000 байт, то длина бинарного блока ограничивается размером файла (от начала до метки EOF, то есть End of File — конец файла).
Для отображения информации, полученной в процессе, мы регистрируем обработчик события onload с анонимной функцией, позволяющей отправить ссылку на объект file. Принимает данную ссылку функция show(), которая и выводит на экран значения свойств объекта.
У бинарных блоков огромное количество преимуществ. Например, можно в цикле сгенерировать несколько бинарных блоков из одного файла, а затем обработать получившиеся части одну за другой. Это удобно для создания асинхронных загрузчиков, программ для обработки изображений и решения многих других задач. Бинарные блоки открывают новые возможности кода JavaScript.
Добавить комментарий