Filereader Read As Binary Options


ReadAsBinaryString dice que los datos deben ser representados como una cadena binaria. Donde: cada byte está representado por un número entero en el rango 0..255. JavaScript no tiene un tipo binario y por lo que fueron con una cadena con la garantía de que ningún carácter almacenado en la cadena estaría fuera del rango 0..255. (Podrían haber ido con una serie de números en su lugar, pero quizás grandes cadenas son más eficientes en memoria que los grandes arreglos de números, ya que los números son de punto flotante.) Si estás leyendo un archivo que es en su mayoría de texto en un script occidental Principalmente inglés, por ejemplo), entonces esa cadena va a parecer mucho texto. Si lee un archivo con caracteres Unicode, debe notar una diferencia, ya que las cadenas de JavaScript son UTF-16 (detalles a continuación) y por lo tanto algunos caracteres tendrán valores por encima de 255, mientras que una cadena binaria de acuerdo con la especificación API de archivos no tendría Cualquier valor por encima de 255 (youd tiene dos caracteres individuales para los dos bytes del punto de código Unicode). Si está leyendo un archivo que no es texto en absoluto (una imagen, tal vez), probablemente obtendrá un resultado muy similar entre readAsText y readAsBinaryString. Pero con readAsBinaryString sabes que no habrá ningún intento de interpretar secuencias de varios bytes como caracteres. Usted no sabe que si usted utiliza readAsText. Porque readAsText utilizará una determinación de codificación para intentar averiguar qué es la codificación de los archivos y luego asignarla a las cadenas UTF-16 de JavaScripts. Puede ver el efecto si crea un archivo y lo almacena en algo distinto de ASCII o UTF-8. (En Windows puede hacer esto a través del Bloc de notas el Guardar como como un desplegable de codificación con Unicode en él, por lo que mirando a los datos que parecen significar UTF-16 Im seguro de Mac OS y editores nix tienen una característica similar.) Heres Una página que vuelca el resultado de la lectura de un archivo en ambos sentidos: Si utilizo eso con un archivo de prueba 1 2 3 almacenado en UTF-16, he aquí los resultados que obtengo: Como se puede ver, readAsText interpretó los caracteres y así conseguí 13 (la longitud de la prueba 1 2 3), y readAsBinaryString didnt, y así conseguí 28 (la BOM de dos bytes más dos bytes para cada carácter). Las cadenas de JavaScript son UTF-16 puede parecer una declaración extraña no son sólo Unicode No, una cadena de JavaScript es una serie de unidades de código UTF-16 que ve pares de sustitución como dos caracteres JavaScript individuales a pesar de que, de hecho, el par de sustitución como un Todo es sólo un carácter. Vea el enlace para más detalles. DigitalFresh: La cadena es el dato binario. Como comentaste, publiqué un ejemplo que puede ayudar. El Javascript no tiene un tipo quotbinaryquot y así que fueron con una secuencia con la garantía que ningún carácter almacenado en la secuencia estaría fuera del rango 0..255. (Ellos podrían haber ido con una matriz de números en su lugar, pero no lo hicieron.) El ejemplo muestra cómo obtener el valor bruto de un quotcharacterquot de la cadena. Ndash T. J. Debido a que este material es asíncrono, no puede lanzar excepciones que usted necesita para mirar la interfaz para ver si hay alguna forma asíncrona que informa de los errores. Y de hecho, FileReader tiene onerror para esto. Cuando usas un archivo: 4747 URL, tu dominio de documento es nulo, lo que tiende a cerrarte de muchas cosas (no conozco los detalles, nunca lo hago), especialmente. Cuando el SOP entra en él. Estoy bastante seguro de que está hasta el navegador, al menos por ahora, ya que la parte de seguridad de la especificación es todavía provisional: w3.org/TR/FileAPI/security-discussion Pero no esperaba que funcionara. Ndash T. J. Muchas gracias TJCrowder - Suprimí mi comentario para evitar que otros se dejen engañar por mi simplificación excesiva, y gracias por publicar los detalles - Estoy seguro de que otros encontrarán sus comentarios mucho más útiles (y leyendo el Artículo es realmente una buena idea, como usted dice, si uno es mucking alrededor en esta área). Ndash Brian M. Hunt Dec 30 14 a las 14: 16Working con archivos en JavaScript, parte 2: FileReader Publicado en 15 de mayo 2012 por Nicholas C. Zakas En mi post anterior. Presenté el uso de archivos en JavaScript, centrándome específicamente en cómo obtener acceso a los objetos de archivo. Estos objetos contienen metadatos de archivo obtenidos sólo cuando el usuario opta por cargar un archivo o arrastra y suelta un archivo en la página web. Una vez que haya archivos, sin embargo, el siguiente paso es leer los datos de ellos. El tipo FileReader El tipo FileReader tiene un solo trabajo: para leer datos de un archivo y almacenarlos en una variable JavaScript. La API está intencionalmente diseñada para ser similar a XMLHttpRequest ya que ambos están cargando datos desde un recurso externo (fuera del explorador). La lectura se realiza asincrónicamente para no bloquear el navegador. Hay varios formatos que un FileReader puede crear para representar los datos del archivo, y el formato debe ser solicitado al pedir que el archivo sea leído. La lectura se realiza llamando a uno de estos métodos: readAsText () 8211 devuelve el contenido del archivo como texto sin formato readAsBinaryString () 8211 devuelve el contenido del archivo como una cadena de datos binarios codificados (8211 en lugar de 827 readAsArrayBuffer) readAsArrayBuffer () El contenido del archivo como un ArrayBuffer (bueno para los datos binarios, como las imágenes) readAsDataURL () 8211 devuelve el contenido del archivo como una URL de datos Cada uno de estos métodos inicia un archivo similar al método send () del objeto XHR que inicia una solicitud HTTP. Como tal, debe escuchar el evento de carga antes de comenzar a leer. El resultado de la lectura siempre está representado por event. target. result. Por ejemplo: Este ejemplo simplemente lee el contenido de un archivo y lo emite en texto sin formato a la consola. El controlador onload se llama cuando el archivo se lee correctamente mientras que el controlador onerror se llama si el archivo wasn8217t leído por alguna razón. La instancia de FileReader está disponible dentro del controlador de eventos a través de event. target y it8217s recomienda usarlo en lugar de referenciar directamente la variable del lector. La propiedad de resultado contiene el contenido del archivo en caso de éxito y el error contiene información de error sobre la operación fallida. Lectura de URI de datos Puede utilizar la misma configuración básica para leer un URI de datos. Los URI de datos (a veces denominados URL de datos) son una opción interesante si, por ejemplo, desea mostrar una imagen que se acaba de leer desde el disco. Podría hacerlo con el siguiente código: Este código simplemente inserta una imagen que se leyó desde el disco en una página. Dado que el URI de datos contiene todos los datos de imagen, puede pasar directamente al atributo src de una imagen y mostrarse en la página. Puede cargar alternativamente la imagen y dibujarla también en un ltcanvasgt: Este código carga los datos de la imagen en un nuevo objeto de imagen y luego los utiliza para dibujar la imagen en un lienzo (especificando tanto el ancho como la altura como 100). Los URI de datos se utilizan generalmente para este propósito, pero se pueden utilizar en cualquier tipo de archivo. El caso de uso más común para leer un archivo en un URI de datos es mostrar el contenido del archivo en una página web inmediatamente. Lectura ArrayBuffers El ArrayBuffer tipo 1 se introdujo por primera vez como parte de WebGL. Un ArrayBuffer representa un número finito de bytes que se pueden utilizar para almacenar números de cualquier tamaño. La forma en que se leen los datos desde un ArrayBuffer es utilizando una vista específica, como Int8Array. Que trata los bytes subyacentes como una colección de números enteros de 8 bits o Float32Array. Que trata los bytes subyacentes como una colección de números de punto flotante de 32 bits. Estos se llaman matrices de matrices 2. que le obligan a trabajar con un tipo numérico específico en lugar de contener cualquier tipo de datos (como con arrays tradicionales). Utiliza un ArrayBuffer principalmente cuando se trata de archivos binarios, para tener un control más fino sobre los datos. It8217s más allá del alcance de este post para explicar todos los entresijos de ArrayBuffer. Sólo darse cuenta de que usted puede leer un archivo en un ArrayBuffer bastante fácilmente si lo necesita. Puede pasar un ArrayBuffer directamente a un método send () de XHR para enviar los datos sin procesar al servidor (you8217ll tiene que leer estos datos de la solicitud en el servidor para reconstruir el archivo), siempre y cuando su navegador apoye completamente XMLHttpRequest Level 2 3 (navegadores más recientes, incluyendo Internet Explorer 10 y Opera 12). A continuación Lectura de datos de un archivo con un FileReader es bastante simple. Si sabe cómo utilizar XMLHttpRequest. No hay razón por la que puedas estar leyendo datos de archivos. En la siguiente parte de esta serie, you8217ll aprenderá más sobre el uso de los eventos FileReader y entender más sobre posibles errores. Referencias Exención de responsabilidad: Cualquier punto de vista y opiniones expresadas en este artículo son las de Nicholas C. Zakas y no reflejan de ninguna manera las de mi empleador, mis colegas Wrox Publishing. OReilly Publishing. O cualquier otra persona. Hablo sólo para mí, no para ellos. Esta especificación proporciona una API para la representación de objetos de archivo en aplicaciones web, así como su selección mediante programación y el acceso a sus datos. Esto incluye: Una interfaz FileList, que representa una matriz de archivos seleccionados individualmente del sistema subyacente. La interfaz de usuario para la selección se puede invocar a través de ltinput typefilegt. Es decir, cuando el elemento de entrada está en el estado de carga de archivo HTML. Una interfaz Blob, que representa datos binarios crudos inmutables y permite el acceso a rangos de bytes dentro del objeto Blob como una Blob independiente. Una interfaz de archivo, que incluye atributos informativos de sólo lectura sobre un archivo como su nombre y la fecha de la última modificación (en disco) del archivo. Una interfaz FileReader, que proporciona métodos para leer un archivo o un Blob. Y un modelo de eventos para obtener los resultados de estas lecturas. Un esquema de URL para su uso con datos binarios, como archivos, para que puedan referenciarse dentro de las aplicaciones web. Además, esta especificación define objetos que se utilizarán dentro de aplicaciones web hiladas para la lectura síncrona de archivos. La sección de requisitos y casos de uso REQ cubre la motivación detrás de esta especificación. Esta API está diseñada para ser utilizada en conjunto con otras API y elementos de la plataforma web, en particular: XMLHttpRequest (por ejemplo, con un método de envío sobrecargado para los argumentos de archivo o Blob), postMessage. DataTransfer (parte de la API de arrastrar y soltar definida en HTML) y Web Workers. Además, debe ser posible obtener mediante programación una lista de archivos del elemento de entrada cuando se encuentra en el estado de carga de archivo HTML. Estos tipos de comportamientos se definen en las especificaciones afiliadas apropiadas. Estado de este documento Esta sección describe el estado de este documento en el momento de su publicación. Otros documentos pueden reemplazar este documento. Una lista de las publicaciones actuales del W3C y la última revisión de este informe técnico se puede encontrar en el índice de informes técnicos del W3C en. w3.org / TR /. Si tiene comentarios para esta especificación, envíelos a public-webappsw3.org con un Subject: prefijo de FileAPI. Ver Bugzilla para estas especificaciones de errores abiertos. Este documento fue publicado por el Grupo de Trabajo de Aplicaciones Web como un borrador de trabajo. Este documento está destinado a convertirse en una Recomendación del W3C. Si desea hacer comentarios sobre este documento, envíelos a public-webappsw3.org (suscribirse a archivos). Todos los comentarios son bienvenidos. La publicación como borrador de trabajo no implica aprobación por parte de los miembros del W3C. Este es un borrador de documento y puede ser actualizado, reemplazado u obsoleto por otros documentos en cualquier momento. No es apropiado citar este documento como algo que no sea trabajo en curso. Este documento fue producido por un grupo que operaba bajo la Política de Patentes del W3C del 5 de febrero de 2004. W3C mantiene una lista pública de cualquier divulgación de patente hecha en relación con las entregas del grupo que la página también incluye instrucciones para revelar una patente. Una persona que tiene conocimiento real de una patente que el individuo cree que contiene Reclamaciones Esenciales debe revelar la información de acuerdo con la sección 6 de la Política de Patentes del W3C. Este documento se rige por el documento de proceso del W3C del 1 de agosto de 2014. Tabla de contenidos 1. Introducción Esta sección es informativa. Las aplicaciones web deben tener la capacidad de manipular lo más amplio posible un rango de entrada de usuario, incluidos los archivos que un usuario desee subir a un servidor remoto o manipular dentro de una aplicación web enriquecida. Esta especificación define las representaciones básicas para archivos, listas de archivos, errores generados por el acceso a archivos y maneras programáticas de leer archivos. Además, esta especificación también define una interfaz que representa datos en bruto que se pueden procesar asincrónicamente en el subproceso principal de los agentes de usuario conformes. Las interfaces y la API definidas en esta especificación se pueden utilizar con otras interfaces y API expuestas a la plataforma web. La interfaz de archivo representa los datos de archivo normalmente obtenidos del sistema de archivos subyacente (OS), y la interfaz Blob (objeto grande binario - un nombre introducido originalmente en las API de Google en Gears de Google) representa datos crudos inmutables. Las lecturas de archivos o blob deben suceder de forma asincrónica en el subproceso principal, con una API síncrona opcional utilizada en aplicaciones web con subprocesos. Una API asíncrona para leer archivos impide el bloqueo y la congelación de la interfaz de usuario en un subproceso principal de agentes de usuario. Esta especificación define una API asíncrona basada en un modelo de evento para leer y acceder a un archivo o datos Blob. Un objeto FileReader proporciona métodos de lectura asíncronos para acceder a los datos de los archivos mediante los atributos del manejador de eventos y la activación de eventos. El uso de eventos y controladores de eventos permite a los bloques de código independientes la capacidad de supervisar el progreso de la lectura (que es particularmente útil para unidades remotas o montadas, donde el rendimiento de acceso a archivos puede variar de unidades locales) y las condiciones de error que pueden surgir durante la lectura De un archivo. Un ejemplo ilustrativo. En el ejemplo siguiente, los diferentes bloques de código controlan las condiciones de progreso, error y éxito. 2. Conformidad Todo en esta especificación es normativo excepto para ejemplos y secciones marcados como informativos. Las palabras clave DEBE, NO DEBE, REQUERIDO, NO DEBE, RECOMIENDA, MAYO y OPCIONAL en este documento deben interpretarse como se describe en Palabras clave para su uso en RFCs para indicar los niveles de requisitos RFC2119. Las siguientes clases de conformidad son definidas por esta especificación: agente de usuario conforme Un agente de usuario se considera un agente de usuario conforme si satisface todos los criterios de MUST, REQUIRED y SHALL en esta especificación que se aplican a las implementaciones. Esta especificación utiliza tanto los términos agente de usuario conforme como agente de usuario para referirse a esta clase de producto. Los agentes de usuario pueden implementar algoritmos en estas especificaciones de cualquier manera deseada, siempre y cuando el resultado final sea indistinguible del resultado que se obtendría de los algoritmos de especificaciones. Los agentes de usuario que utilizan ECMAScript para implementar las API definidas en esta especificación deben implementarlas de una manera consistente con los Enlaces ECMAScript definidos en la especificación Web IDL WEBIDL ya que esta especificación utiliza esa especificación y terminología. 3. Dependencias Esta especificación se basa en especificaciones subyacentes. Un agente de usuario que cumpla debe soportar al menos el subconjunto de la funcionalidad definida en DOM4 en la que esta especificación se basa en particular, debe soportar EventTarget. DOM4 Un agente de usuario conforme debe soportar la especificación Progress Events. El acceso de datos en las operaciones de lectura se habilita mediante eventos de progreso. Un agente de usuario que cumpla debe soportar por lo menos el subconjunto de la funcionalidad definida en HTML en la que esta especificación se apoya en particular, debe admitir bucles de eventos y atributos de manejador de eventos. HTML Un agente de usuario que cumpla también debe ser una implementación conforme de los fragmentos IDL en esta especificación, tal como se describe en la especificación Web IDL. WebIDL Las partes de esta especificación se basan en la especificación Web Workers para aquellas partes de esta especificación, la especificación Web Workers es una dependencia normativa. Trabajadores 4. Terminología 4.1 Términos El documento de términos y algoritmos. Descarga de los pasos de limpieza del documento. Atributos del controlador de eventos. Tipo de evento del controlador de eventos. Origen de escritura eficaz. Objeto de configuración estable. Eventos. tarea. Fuente de tareas. URL. Lista global de trabajos de limpieza de secuencias de comandos. Limpieza global de scripts. Cola una tarea. UTF - 8. UTF - 16. Clon estructurado. Recopilar una secuencia de caracteres y convertir una cadena a ASCII en minúscula son como se define en HTML de la especificación HTML. Los términos origen y origen son los definidos por la especificación ORIGIN. Cuando esta especificación dice que para terminar un algoritmo el agente de usuario debe terminar el algoritmo después de terminar el paso que está encendido, y volver de él. Los métodos de lectura asíncronos definidos en esta especificación pueden volver antes de que el algoritmo en cuestión se termine, y pueden ser terminados por una llamada abort (). El término lanzar en esta especificación, ya que se refiere a excepciones, se utiliza tal como se define en la especificación DOM4 DOM4. El término byte en esta especificación se utiliza tal como se define en la especificación de codificación de especificación de codificación. El término chunk en esta especificación se utiliza tal como se define en la especificación Streams Specification Streams. El término objeto de contexto en esta especificación se utiliza tal como se define en la especificación DOM4 DOM4. Los términos URL. URL relativa. URL base. Analizador de URL. Analizador básico de la URL. esquema. anfitrión. Relativo. Datos del esquema. Y el fragmento son según lo definido por el URL de la especificación del URL de WHATWG. Los términos solicitan. respuesta. Cuerpo y petición de origen cruzado son como se definen en la especificación de búsqueda WHATWG Fetch especificación. El término Unix Epoch se utiliza en esta especificación para referirse al tiempo 00:00:00 UTC el 1 de enero de 1970 (o 1970-01-01T00: 00: 00Z ISO 8601) este es el mismo tiempo que es conceptualmente 0 en ECMA - 262 ECMA-262. Los algoritmos y pasos de esta especificación usan las siguientes operaciones matemáticas: max (a, b) devuelve el máximo de a y b, y siempre se realiza en números enteros como se definen en WebIDL WebIDL en el caso de max (6,4) El resultado es 6. Esta operación también se define en ECMAScript ECMA-262. Min (a, b) devuelve el mínimo de ayb, y siempre se realiza en enteros como se definen en WebIDL WebIDL en el caso de min (6,4) el resultado es 4. Esta operación también se define en ECMAScript ECMA -262. Las comparaciones matemáticas tales como lt (menor que), (menor o igual a) y gt (mayor que) son como en ECMAScript ECMA-262. 5. La interfaz Blob y los datos binarios Un objeto Blob se refiere a una secuencia de bytes y tiene un atributo de tamaño que es el número total de bytes en la secuencia de bytes y un atributo de tipo, que es una cadena codificada en ASCII en minúsculas que representa El tipo de medio de la secuencia de bytes. Un Blob debe tener un estado de legibilidad. Que es uno de ABIERTO o CERRADO. Un Blob que se refiere a una secuencia de bytes, incluyendo uno de 0 bytes, se dice que está en el estado de legibilidad ABIERTO. Se dice que una Blob está cerrada si se ha llamado a su método cerrado. Se dice que una Blob que está cerrada está en el estado de legibilidad CLOSED. Cada Blob debe tener un estado de instantánea interna. Que debe establecerse inicialmente en el estado del almacenamiento subyacente, si existe tal almacenamiento subyacente y debe conservarse mediante clon estructurado. Se puede encontrar una definición normativa adicional del estado de la instantánea para los archivos. 5.1. Constructores El constructor Blob () se puede invocar con cero o más parámetros. Cuando se invoca el constructor Blob (), los agentes de usuario deben ejecutar los siguientes pasos del constructor Blob: Si se invoca con cero parámetros, devuelve un nuevo objeto Blob con su estado de legibilidad establecido en OPENED. Consistente en 0 bytes, con el tamaño establecido en 0 y con el tipo establecido en la cadena vacía. De lo contrario, el constructor se invoca con una secuencia blobParts. Sea una secuencia. Deje que los bytes sean una secuencia vacía de bytes. Sea longitud una longitud s. Para 0 i lt longitud. Repita los pasos siguientes: Sea elemento el i-ésimo elemento de a. Si elemento es un DOMString. Ejecute las siguientes subetapas: Sea s el resultado de convertir el elemento a una secuencia de caracteres Unicode Unicode utilizando el algoritmo para hacerlo en WebIDL WebIDL. Codifique s como UTF-8 y agregue los bytes resultantes a bytes. El algoritmo de WebIDL WebIDL reemplaza sustituto incomparable en una cadena UTF-16 no válida con caracteres de sustitución UFFFD. Existen escenarios cuando el constructor Blob puede resultar en alguna pérdida de datos debido a secuencias de caracteres perdidas o codificadas. Si elemento es un ArrayBufferView TypedArrays, convierta a una secuencia de byteLength bytes desde el ArrayBuffer subyacente. Comenzando en el byteOffset de ArrayBufferView TypedArrays y añadiendo esos bytes a bytes. Si element es ArrayBuffer TypedArrays, convierta a una secuencia de bytes de byteLength y añada esos bytes a bytes. Si elemento es una Blob. Agrega los bytes que representa a bytes. Se ignora el tipo del elemento de matriz Blob. Si se proporciona el miembro de tipo del argumento options opcional y no es la cadena vacía, ejecute los siguientes sub-pasos: Sea t el miembro del diccionario de tipo. Si t contiene caracteres fuera del rango U0020 a U007E, entonces establezca t en la cadena vacía y regrese de estos subpasos. Convierta cada carácter en t a minúsculas usando la conversión de una cadena al algoritmo ASCII en minúsculas WebIDL. Devolver un objeto Blob con su estado de legibilidad establecido en OPENED. Haciendo referencia a bytes como su secuencia de bytes asociada, con su tamaño ajustado a la longitud de bytes. Y su tipo ajustado al valor de t desde los subetapas anteriores. El tipo t de un Blob se considera un tipo MIME parsable si la cadena codificada en ASCII que representa el tipo de objetos Blob, cuando se convierte en una secuencia de bytes, no devuelve indefinida para el algoritmo de tipo MIME de análisis MIMESNIFF. 5.1.1. Parámetros del Constructor El constructor Blob () se puede invocar con los siguientes parámetros: Una secuencia blobParts que toma cualquier número de los siguientes tipos de elementos y en cualquier orden: Un BlobPropertyBag opcional que toma un miembro: type. La cadena codificada en ASCII en minúsculas que representa el tipo de medio de la Blob. Las condiciones normativas para este miembro se proporcionan en los pasos del constructor Blob. Siguen ejemplos de uso del constructor. 5.2. Atributos Devuelve el tamaño de la secuencia de bytes en número de bytes. Al obtener, los agentes de usuario conformes deben devolver el número total de bytes que pueden ser leídos por un objeto FileReader o FileReaderSync, o 0 si el Blob no tiene bytes que leer. Si la Blob tiene un estado de legibilidad de CLOSED, el tamaño debe devolver 0. La cadena codificada en ASCII en minúsculas que representa el tipo de medio de la Blob. Al obtener, los agentes de usuario deben devolver el tipo de un Blob como una cadena codificada en ASCII en minúsculas, de modo que cuando se convierte en una secuencia de bytes, es un tipo MIME parsable MIMESNIFF o la cadena vacía - 0 bytes - - si no se puede determinar el tipo. El atributo de tipo puede ser establecido por la propia aplicación web a través de la invocación del constructor ya través de la llamada de división en estos casos, las condiciones normativas adicionales para este atributo se encuentran en los pasos del constructor Blob. Los pasos del Constructor de archivos. Y el algoritmo del método de corte respectivamente. Los agentes de usuario también pueden determinar el tipo de Blob. Especialmente si la secuencia de bytes es de un archivo en disco en este caso, las condiciones normativas adicionales están en las guías de tipo de archivo. El valor booleano que indica si el Blob está en el estado de legibilidad CLOSED. Al obtener, los agentes de usuario deben devolver false si la Blob está en estado de legibilidad OPENED. Y true si el Blob está en el estado de legibilidad CLOSED como resultado del método close que se llama. 5.3. Métodos y parámetros 5.3.1. El método slice El método slice devuelve un nuevo objeto Blob con bytes que van desde el parámetro de inicio opcional hasta el parámetro final opcional, pero sin incluirlo, y con un atributo de tipo que es el valor del parámetro opcional contentType. Debe actuar de la siguiente manera: Sea O el objeto de contexto Blob en el que se está llamando el método de corte. El parámetro de inicio opcional es un valor para el punto de inicio de una llamada de división, y debe tratarse como una posición de orden de bytes, con la posición cero que representa el primer byte. Los agentes de usuario deben procesar la rebanada con el inicio normalizado de acuerdo con lo siguiente: Si el parámetro de inicio opcional no se utiliza como parámetro al realizar esta llamada, deje que el parámetroStart sea 0. Si el inicio es negativo, ). Else, dejó que relativoStart sea min (comienzo, tamaño). El parámetro final opcional es un valor para el punto final de una llamada de división. Los agentes de usuario deben procesar la rebanada con el extremo normalizado de acuerdo con lo siguiente: Si el parámetro final opcional no se utiliza como parámetro al realizar esta llamada, permita que relativoEnd sea tamaño. Si final es negativo, deje que relativoEnd sea max ((fin de tamaño), 0) Else, let relativeEnd be min (end, size) El parámetro opcional contentType se utiliza para establecer la cadena codificada en ASCII en minúsculas que representa el tipo de medio de la Gota. Los agentes de usuario deben procesar la división con contentType normalizado de acuerdo con lo siguiente: Si el parámetro contentType no se proporciona, deje que relativeContentType se establezca en la cadena vacía. Deje que relativeContentType se establezca en contentType y ejecute los substeps a continuación: Si relativeContentType contiene caracteres fuera del rango de U0020 a U007E, establezca relativoContentType a la cadena vacía y devuelva de estos subpasos. Convierta cada carácter en relativoContentType a minúsculas usando la conversión de una cadena al algoritmo ASCII en minúsculas. Sea span max ((relativeEnd - relativoStart), 0). Devuelve un nuevo objeto Blob S con las siguientes características: El estado de legibilidad del objeto de contexto es retenido por el objeto Blob devuelto por la llamada de división, esto tiene implicaciones sobre si el Blob devuelto es realmente utilizable para operaciones de lectura o como URL de Blob. S hace referencia a un intervalo de byte s consecutivo de O. comenzando con el byte en la posición de orden de byte relativoStart. El tipo t de un Blob se considera un tipo MIME parsable si la cadena codificada en ASCII que representa el tipo de objetos Blob, cuando se convierte en una secuencia de bytes, no devuelve indefinida para el algoritmo de tipo MIME de análisis MIMESNIFF. Los siguientes ejemplos ilustran los diferentes tipos de llamadas de rebanadas posibles. Dado que la interfaz de archivo hereda de la interfaz Blob, los ejemplos se basan en el uso de la interfaz de archivo. 6. La interfaz de archivos Un objeto File es un objeto Blob con un atributo de nombre, que es una cadena que se puede crear dentro de la aplicación web a través de un constructor, o es una referencia a una secuencia de bytes de un archivo desde el sistema operativo subyacente Sistema de archivos. Si un objeto File es una referencia a una secuencia de bytes que se origina desde un archivo en disco, su estado de instantánea debe establecerse en el estado del archivo en disco en el momento en que se crea el objeto File. Este es un requisito no trivial para implementar para los agentes de usuario, y por lo tanto no es un deber, sino un debe RFC2119. Los agentes de usuario deben esforzarse por tener un estado de instantánea de objetos de archivo establecido en el estado del almacenamiento subyacente en disco en el momento en que se toma la referencia. Si el archivo se modifica en el disco después de que se haya realizado una referencia, el estado de la instantánea del archivo será diferente del estado del almacenamiento subyacente. Los agentes de usuario pueden usar marcas de tiempo de modificación y otros mecanismos para mantener el estado de la instantánea. Pero esto se deja como un detalle de implementación. Cuando un objeto File se refiere a un archivo en disco, los agentes de usuario deben devolver el tipo de ese archivo y deben seguir las directrices de tipo de archivo siguientes: Los agentes de usuario deben devolver el tipo como una cadena codificada en ASCII en minúsculas, Se convierte en una secuencia de bytes correspondiente, es un tipo MIME parsable MIMESNIFF o la cadena vacía - 0 bytes - si no se puede determinar el tipo. Cuando el archivo es del tipo text / plain, los agentes de usuario NO deben agregar un parámetro de charset al parámetro dictionary de la porción del tipo de medio MIMESNIFF. Los agentes de usuario no deben intentar la determinación heurística de la codificación, incluidos los métodos estadísticos. 6.1 Constructor El constructor de archivo se invoca con dos o tres parámetros, dependiendo de si se utiliza el parámetro de diccionario opcional. Cuando se invoca el constructor File (), los agentes de usuario deben ejecutar los siguientes pasos del constructor de archivos: Deje que a sea el argumento de la secuencia filesBits. Deje que los bytes sean una secuencia vacía de bytes. Sea longitud una longitud s. Para 0 i lt longitud. Repita los pasos siguientes: Sea elemento el i-ésimo elemento de a. Si elemento es un DOMString. Ejecute las siguientes subetapas: Sea s el resultado de convertir el elemento a una secuencia de caracteres Unicode Unicode utilizando el algoritmo para hacerlo en WebIDL WebIDL. Codifique s como UTF-8 y agregue los bytes resultantes a bytes. El algoritmo de WebIDL WebIDL reemplaza sustituto incomparable en una cadena UTF-16 no válida con caracteres de sustitución UFFFD. Existen escenarios cuando el constructor Blob puede resultar en alguna pérdida de datos debido a secuencias de caracteres perdidas o codificadas. Si element es ArrayBufferView TypedArrays, convierta a una secuencia de bytes de byteLength desde el ArrayBuffer subyacente, comenzando en el byteOffset de ArrayBufferView TypedArrays, y agregue esos bytes a bytes. Si element es ArrayBuffer TypedArrays, convierta a una secuencia de bytes de byteLength y añada esos bytes a bytes. Si elemento es una Blob. Agrega los bytes que representa a bytes. El tipo del argumento Blob debe ser ignorado. Sea n una nueva cadena del mismo tamaño que el argumento fileName para el constructor. Copia todos los caracteres de fileName a n. Reemplazando cualquier / carácter (U002F SOLIDUS) con un: (U003A COLON).Un sistema de archivos OS distinto utiliza diferentes convenciones para el nombre de archivo con los archivos construidos, obligando a UTF-16 reduce la ambigüedad cuando los nombres de archivo se convierten en secuencias de bytes. Si se utiliza el argumento opcional FilePropertyBag, ejecute las siguientes subetapas: Si se proporciona el miembro de tipo y no es la cadena vacía, se debe establecer t como el miembro del diccionario de tipo. Si t contiene caracteres fuera del rango U0020 a U007E, entonces establezca t en la cadena vacía y regrese de estos subpasos. Convierta cada carácter en t a minúsculas usando la conversión de una cadena al algoritmo ASCII en minúsculas WebIDL. Si se proporciona el miembro lastModified, deje d establecido en el miembro del diccionario lastModified. Si no se proporciona, ajuste d a la fecha y hora actuales representadas como el número de milisegundos desde la Época de Unix (que es el equivalente de Date. now () ECMA-262). Dado que los objetos ECMA-262 Date se convierten en valores largos largos que representan el número de milisegundos desde la Época Unix. El miembro lastModified podría ser un objeto Date ECMA-262. Devuelve un nuevo objeto File F tal que: F tiene un estado de legibilidad de OPENED. F se refiere a la secuencia de bytes bytes. F. size se establece en el número de bytes totales en bytes. F. name se establece en n. F. type se establece en t. El tipo t de un archivo se considera un tipo MIME parsable si la cadena ASCII-codificada que representa el tipo de objetos File, cuando se convierte en una secuencia de bytes, no devuelve indefinido para el algoritmo de tipo MIME de análisis MIMESNIFF . 6.1.1 Constructor Parameters The File() constructor can be invoked with the parameters below: A fileBits sequence which takes any number of the following elements, and in any order: Blob elements, which includes File elements. A name parameterA DOMString WebIDL parameter representing the name of the file normative conditions for this constructor parameter can be found in the File constructor steps . which takes the following members: An optional type member the ASCII-encoded string in lower case representing the media type of the File. Normative conditions for this member are provided in the File constructor steps . An optional lastModified member, which must be a long long normative conditions for this member are provided in the File constructor steps . 6.2. Attributes The name of the file on getting, this must return the name of the file as a string. There are numerous file name variations and conventions used by different underlying OS file systems this is merely the name of the file, without path information. On getting, if user agents cannot make this information available, they must return the empty string. If a File object is created using a constructor, further normative conditions for this attribute are found in the file constructor steps . The last modified date of the file. On getting, if user agents can make this information available, this must return a long long set to the time the file was last modified as the number of milliseconds since the Unix Epoch. If the last modification date and time are not known, the attribute must return the current date and time as a long long representing the number of milliseconds since the Unix Epoch this is equivalent to Date. now() ECMA-262 . If a File object is created using a constructor, further normative conditions for this attribute are found in the file constructor steps. The File interface is available on objects that expose an attribute of type FileList these objects are defined in HTML HTML . The File interface, which inherits from Blob. is immutable, and thus represents file data that can be read into memory at the time a read operation is initiated. User agents must process reads on files that no longer exist at the time of read as errors. throwing a NotFoundError exception if using a FileReaderSync on a Web Worker Workers or firing an error event with the error attribute returning a NotFoundError DOMError . In the examples below, metadata from a file object is displayed meaningfully, and a file object is created with a name and a last modified date. 7. The FileList Interface The FileList interface should be considered at risk since the general trend on the Web Platform is to replace such interfaces with the Array platform object in ECMAScript ECMA-262 . In particular, this means syntax of the sort filelist. item(0) is at risk most other programmatic use of FileList is unlikely to be affected by the eventual migration to an Array type. This interface is a list of File objects. Sample usage typically involves DOM access to the ltinput typefilegt element within a form, and then accessing selected files. 7.1. Attributes must return the number of files in the FileList object. If there are no files, this attribute must return 0. 7.2. Methods and Parameters must return the indexth File object in the FileList. If there is no indexth File object in the FileList. then this method must return null . index must be treated by user agents as value for the position of a File object in the FileList. with 0 representing the first file. Supported property indices WebIDL are the numbers in the range zero to one less than the number of File objects represented by the FileList object. If there are no such File objects, then there are no supported property indices WebIDL . The HTMLInputElement interface HTML has a readonly attribute of type FileList. which is what is being accessed in the above example. Other interfaces with a readonly attribute of type FileList include the DataTransfer interface HTML . 8. Reading Data 8.1 The Read Operation The algorithm below defines a read operation. which takes a Blob and a synchronous flag as input, and reads byte s into a byte stream which is returned as the result of the read operation. or else fails along with a failure reason. Methods in this specification invoke the read operation with the synchronous flag either set or unset. The synchronous flag determines if a read operation is synchronous or asynchronous, and is unset by default. Methods may set it. If it is set, the read operation takes place synchronously. Otherwise, it takes place asynchronously. To perform a read operation on a Blob and the synchronous flag. run the following steps: Let s be a a new body. b be the Blob to be read from, and bytes initially set to an empty byte sequence. Set the length on s to the size of b. While there are still bytes to be read in b perform the following substeps: The algorithm assumes that invoking methods have checked for readability state. A Blob in the CLOSED state must not have a read operation called on it. If the synchronous flag is set, follow the steps below: Let bytes be the byte sequence that results from reading a chunk from b. If an error occurs reading a chunk from b. return s with the error flag set, along with a failure reason. and terminate this algorithm. Along with returning failure, the synchronous part of this algorithm must return the failure reason that occurred for throwing an exception by synchronous methods that invoke this algorithm with the synchronous flag set. If there are no errors, push bytes to s. and increment s s transmitted Fetch by the number of bytes in bytes. Reset bytes to the empty byte sequence and continue reading chunk s as above. When all the bytes of b have been read into s. return s and terminate this algorithm . Otherwise, the synchronous flag is unset. Return s and process the rest of this algorithm asynchronously. Let bytes be the byte sequence that results from reading a chunk from b. If an error occurs reading a chunk from b. set the error flag on s. and terminate this algorithm with a failure reason . The asynchronous part of this algorithm must signal the failure reason that occurred for asynchronous error reporting by methods expecting s and which invoke this algorithm with the synchronous flag unset. If no error occurs, push bytes to s. and increment s s transmitted Fetch by the number of bytes in bytes. Reset bytes to the empty byte sequence and continue reading chunk s as above. To perform an annotated task read operation on a Blob b. perform the steps below: Perform a read operation on b with the synchronous flag unset, along with the additional steps below. If the read operation terminates with a failure reason. queue a task to process read error with the failure reason and terminate this algorithm. When the first chunk is being pushed to the body s during the read operation. queue a task to process read . Once the body s from the read operation has at least one chunk read into it, or there are no chunk s left to read from b. queue a task to process read data. Keep queuing tasks to process read data for every chunk read or every 50ms, whichever is least frequent . When all of the chunk s from b are read into the body s from the read operation. queue a task to process read EOF . 8.2. The File Reading Task Source This specification defines a new generic task source called the file reading task source. which is used for all tasks that are queued in this specification to read byte sequences associated with Blob and File objects. It is to be used for features that trigger in response to asynchronously reading binary data. 8.3 The FileReader API 8.3.1. Constructors When the FileReader() constructor is invoked, the user agent must return a new FileReader object. In environments where the global object is represented by a Window or a WorkerGlobalScope object, the FileReader constructor must be available. 8.3.2. Event Handler Attributes The following are the event handler attributes (and their corresponding event handler event types ) that user agents must support on FileReader as DOM attributes: 8.3.3. FileReader States The FileReader object can be in one of 3 states. The readyState attribute, on getting, must return the current state, which must be one of the following values: EMPTY (numeric value 0) The FileReader object has been constructed, and there are no pending reads. None of the read methods have been called. This is the default state of a newly minted FileReader object, until one of the read methods have been called on it. LOADING (numeric value 1) A File or Blob is being read. One of the read methods is being processed, and no error has occurred during the read. DONE (numeric value 2) The entire File or Blob has been read into memory, OR a file error occurred during read. OR the read was aborted using abort(). The FileReader is no longer reading a File or Blob. If readyState is set to DONE it means at least one of the read methods have been called on this FileReader . 8.3.4. Reading a File or Blob Multiple Reads The FileReader interface makes available three asynchronous read methods - readAsArrayBuffer. readAsText. and readAsDataURL. which read files into memory . If multiple concurrent read methods are called on the same FileReader object, user agents must throw an InvalidStateError DOM4 on any of the read methods that occur when readyState LOADING. 8.3.4.1. The result attribute On getting, the result attribute returns a Blob s data as a DOMString. or as an ArrayBuffer TypedArrays , or null. depending on the read method that has been called on the FileReader. and any errors that may have occurred. The list below is normative for the result attribute and is the conformance criteria for this attribute: On getting, if the readyState is EMPTY (no read method has been called) then the result attribute must return null . On getting, if an error in reading the File or Blob has occurred (using any read method ), then the result attribute must return null . On getting, if the readAsDataURL read method is used, the result attribute must return a DOMString that is a Data URL DataURL encoding of the File or Blob s data. On getting, if the readAsText read method is called and no error in reading the File or Blob has occurred, then the result attribute must return a string representing the File or Blob s data as a text string, and should decode the string into memory in the format specified by the encoding determination as a DOMString. On getting, if the readAsArrayBuffer read method is called and no error in reading the File or Blob has occurred, then the result attribute must return an ArrayBuffer TypedArrays object. 8.3.4.2. The readAsDataURL(blob) method When the readAsDataURL(blob) method is called, the user agent must run the steps below. Set the result attribute to the body returned by the read operation as a DataURL DataURL on getting, the result attribute returns the blob as a Data URL DataURL . Use the blob s type attribute as part of the Data URL if it is available in keeping with the Data URL specification DataURL . If the type attribute is not available on the blob return a Data URL without a media-type. DataURL . Data URLs that do not have media-types RFC2046 must be treated as plain text by conforming user agents. DataURL . 8.3.4.3. The readAsText(blob, label) method The readAsText() method can be called with an optional parameter, label. which is a DOMString argument that represents the label of an encoding Encoding Specification if provided, it must be used as part of the encoding determination used when processing this method call. When the readAsText(blob, label) method is called (the label argument is optional), the user agent must run the steps below. If readyState LOADING throw an InvalidStateError DOM4 and terminate these steps.

Comments

Popular Posts