Wednesday 5 July 2017

Filereader read as binary options


ReadAsBinaryString diz que os dados devem ser representados como uma string binária. Onde: cada byte é representado por um número inteiro no intervalo 0..255. JavaScript não tem um tipo binário e assim eles foram com um String com a garantia de que nenhum caractere armazenado no String seria fora do intervalo 0..255. (Eles poderiam ter ido com uma matriz de Números em vez disso, mas eles didnt talvez grandes Strings são mais memória eficiente do que grandes matrizes de números, uma vez que os números são ponto flutuante.) Se você está lendo um arquivo thats principalmente texto em um script ocidental Principalmente inglês, por exemplo), então essa string vai parecer muito com texto. Se você ler um arquivo com caracteres Unicode nele, você deve notar uma diferença, uma vez que as seqüências de caracteres JavaScript são UTF-16 (detalhes abaixo) e assim alguns caracteres terão valores acima de 255, enquanto uma seqüência binária de acordo com a especificação File API não teria Quaisquer valores acima de 255 (youd tem dois caracteres individuais para os dois bytes do ponto de código Unicode). Se você está lendo um arquivo thats não texto em tudo (uma imagem, talvez), você provavelmente ainda obter um resultado muito semelhante entre readAsText e readAsBinaryString. Mas com readAsBinaryString você sabe que não haverá qualquer tentativa de interpretar sequências de vários bytes como caracteres. Você não sabe que se você usar readAsText. Porque readAsText usará uma determinação de codificação para tentar descobrir o que é a codificação de arquivos e, em seguida, mapeá-lo para JavaScripts UTF-16 strings. Você pode ver o efeito se você criar um arquivo e armazená-lo em algo diferente de ASCII ou UTF-8. (No Windows você pode fazer isso através do bloco de notas o Salvar como como uma codificação drop-down com Unicode nele, pelo que olhando para os dados que parecem significar UTF-16 Im certeza Mac OS e nix editores têm um recurso semelhante.) Heres Uma página que despeja o resultado da leitura de um arquivo de ambas as maneiras: Se eu usar isso com um teste 1 2 3 arquivo armazenado em UTF-16, aqui estão os resultados que eu recebo: Como você pode ver, readAsText interpretou os personagens e assim eu tenho 13 (o comprimento do teste 1 2 3), e readAsBinaryString didnt, e assim eu tenho 28 (a BOM de dois bytes mais dois bytes para cada caractere). As seqüências de caracteres JavaScript são UTF-16 pode parecer uma declaração estranha arent eles apenas Unicode Não, uma seqüência de caracteres JavaScript é uma série de unidades de código UTF-16 que você vê pares de substituição como dois caracteres JavaScript individuais mesmo que, de fato, o par de substituto como um Todo é apenas um personagem. Consulte o link para obter detalhes. DigitalFresh: A seqüência de caracteres é os dados binários. Como você estava comentando, eu postei um exemplo que pode ajudar. O JavaScript não tem um tipo quotbinaryquot e assim eles foram com um String com a garantia de que nenhum caractere armazenado na string estaria fora do intervalo 0..255. (Eles poderiam ter ido com uma matriz de números em vez disso, mas eles didn39t.) O exemplo mostra como obter o valor bruto de um quotcharacterquot da seqüência de caracteres. Ndash T. J. Porque este material é assíncrono, não pode lançar exceções que você precisa olhar para a interface para ver se há alguma forma assíncrona que relata erros. E, de fato, FileReader tem onerror para isso. Quando você usa um arquivo: 4747 URL, o seu domínio do documento é nulo, que tende a fechar você fora de um monte de coisas (eu don39t saber os detalhes, eu nunca fazê-lo), esp. Quando o SOP entra nele. I39m com certeza ele é até o navegador, pelo menos por enquanto, como a parte de segurança da especificação ainda é provisória: w3.org/TR/FileAPI/security-discussion Mas eu wouldn39t esperar que ele funcione. Ndash T. J. Muitos agradecimentos TJCrowder - Eu deletei meu comentário para evitar que outros se deixem enganar por minha simplificação excessiva, e obrigado por postar os detalhes - tenho certeza que outros acharão seus comentários muito mais úteis Artigo é realmente uma boa idéia, como você diz, se um é mucking ao redor nesta área). Ndash Brian M. Hunt Dec 30 14 às 14: 16 Trabalhando com arquivos em JavaScript, Parte 2: FileReader Postado em 15 de maio de 2012 por Nicholas C. Zakas No meu post anterior. Eu introduzi usando arquivos em JavaScript, focando especificamente em como obter acesso a objetos File. Esses objetos contêm metadados de arquivos obtidos apenas quando o usuário opta por carregar um arquivo ou arrastar e soltar um arquivo na página da Web. Depois de ter arquivos, no entanto, o próximo passo é ler os dados deles. O tipo FileReader O tipo FileReader tem um único trabalho: para ler dados de um arquivo e armazená-lo em uma variável JavaScript. A API foi intencionalmente projetada para ser semelhante a XMLHttpRequest, uma vez que ambos estão carregando dados de um recurso externo (fora do navegador). A leitura é feita de forma assíncrona para não bloquear o navegador. Há vários formatos que um FileReader pode criar para representar os dados do arquivo e o formato deve ser solicitado ao solicitar que o arquivo seja lido. A leitura é feita através de chamar um destes métodos: readAsText () 8211 retorna o conteúdo do arquivo como texto simples readAsBinaryString () 8211 retorna o conteúdo do arquivo como uma seqüência de dados binários codificados (depreciado 8211 use readAsArrayBuffer () instead) readAsArrayBuffer () O conteúdo do arquivo como um ArrayBuffer (bom para dados binários, como imagens) readAsDataURL () 8211 retorna o conteúdo do arquivo como um URL de dados Cada um desses métodos inicia um arquivo semelhante ao método send () do objeto XHR que inicia uma solicitação HTTP. Como tal, você deve ouvir o evento de carga antes de começar a ler. O resultado da leitura é sempre representado por event. target. result. Por exemplo: Este exemplo simplesmente lê o conteúdo de um arquivo e o salta em texto sem formatação para o console. O manipulador onload é chamado quando o arquivo é lido com êxito enquanto o manipulador onerror é chamado se o arquivo wasn8217t lido por algum motivo. A instância FileReader está disponível dentro do manipulador de eventos via event. target e it8217s recomendado para usar isso em vez de referenciar a variável de leitor diretamente. A propriedade result contém o conteúdo do arquivo sobre o sucesso eo erro contém informações de erro sobre a operação com falha. Leitura de URIs de dados Você pode usar a mesma configuração básica para ler para um URI de dados. URIs de dados (às vezes chamados URLs de dados) são uma opção interessante se você quiser, por exemplo, exibir uma imagem que acabou de ser lida do disco. Você poderia fazer isso com o seguinte código: Este código simplesmente insere uma imagem que foi lida do disco em uma página. Como o URI de dados contém todos os dados da imagem, ele pode ser passado diretamente para o atributo src de uma imagem e exibido na página. Você poderia, alternadamente, carregar a imagem e desenhá-la em um ltcanvasgt também: Este código carrega os dados da imagem em um novo objeto Image e, em seguida, usa isso para desenhar a imagem em uma tela (especificando a largura ea altura como 100). URIs de dados são geralmente utilizados para esta finalidade, mas podem ser usados ​​em qualquer tipo de arquivo. O caso de uso mais comum para ler um arquivo em um URI de dados é exibir o conteúdo do arquivo em uma página da web imediatamente. Leitura ArrayBuffers O ArrayBuffer tipo 1 foi introduzido pela primeira vez como parte do WebGL. Um ArrayBuffer representa um número finito de bytes que podem ser usados ​​para armazenar números de qualquer tamanho. A maneira como os dados são lidos de um ArrayBuffer é usando uma exibição específica, como Int8Array. Que trata os bytes subjacentes como uma coleção de inteiros assinados de 8 bits ou Float32Array. Que trata os bytes subjacentes como uma coleção de números de ponto flutuante de 32 bits. Estes são chamados matrizes digitadas 2. que forçam você a trabalhar com um tipo numérico específico em vez de conter qualquer tipo de dados (como com matrizes tradicionais). Você usa um ArrayBuffer principalmente ao lidar com arquivos binários, para ter controle mais refinado sobre os dados. It8217s além do escopo deste post para explicar todos os prós e contras de ArrayBuffer. Basta perceber que você pode ler um arquivo em um ArrayBuffer muito facilmente se você precisar dele. Você pode passar um ArrayBuffer diretamente para um método send () de objectos do XHR para enviar os dados brutos ao servidor (você terá que ler esses dados da solicitação no servidor para reconstruir o arquivo), desde que seu navegador suporte totalmente o XMLHttpRequest Level 2 3 (navegadores mais recentes, incluindo o Internet Explorer 10 eo Opera 12). A próxima leitura de dados de um arquivo usando um FileReader é muito simples. Se você souber como usar XMLHttpRequest. Não há razão para você também estar lendo dados de arquivos. Na próxima parte desta série, you8217ll aprenderá mais sobre como usar os eventos FileReader e entender mais sobre possíveis erros. Referências Disclaimer: Todos os pontos de vista e opiniões expressas neste artigo são as de Nicholas C. Zakas e não, de qualquer forma, refletem as do meu empregador, meus colegas, Wrox Publishing. OReilly Publishing. Ou qualquer outra pessoa. Eu falo somente para mim, não para eles. Mensagens recentes Informações adicionaisTable of Contents Localizações: Leitura de arquivos em JavaScript usando as APIs de arquivos Índice Localizações Seu navegador pode não suportar a funcionalidade neste artigo. Introdução O HTML5 finalmente fornece uma maneira padrão de interagir com arquivos locais, por meio da especificação da API de Arquivos. Como exemplo de suas capacidades, a API de Arquivo pode ser usada para criar uma pré-visualização em miniatura de imagens enquanto elas estão sendo enviadas para o servidor ou permitir que uma aplicação salve uma referência de arquivo enquanto o usuário estiver offline. Além disso, você pode usar a lógica do lado do cliente para verificar se um uploads mimetype corresponde à sua extensão de arquivo ou restringir o tamanho de um upload. A especificação fornece várias interfaces para acessar arquivos de um sistema de arquivos local: Arquivo - um arquivo individual fornece informações somente leitura, como nome, tamanho do arquivo, mimetype e uma referência ao identificador de arquivo. FileList - uma seqüência semelhante a uma matriz de objetos File. (Pense em multiplexar tipo de arquivo ltinput ou arrastando um diretório de arquivos da área de trabalho). Blob - Permite cortar um arquivo em intervalos de bytes. Quando usado em conjunto com as estruturas de dados acima, a interface FileReader pode ser usada para ler de forma assíncrona um arquivo através de manipulação de eventos JavaScript familiar. Assim, é possível monitorar o progresso de uma leitura, detectar erros e determinar quando uma carga está completa. De muitas maneiras, as APIs se assemelham ao modelo de evento XMLHttpRequest s. Selecionando arquivos A primeira coisa a fazer é verificar se o seu navegador suporta totalmente a API de arquivos: É claro que, se o aplicativo usar apenas algumas dessas APIs, modifique este snippet de acordo. Usando a entrada de formulário para seleção A maneira mais simples de carregar um arquivo é usar um elemento de tipo de arquivo de tipo ltinput padrão. O JavaScript retorna a lista de objetos File selecionados como FileList. Heres um exemplo que usa o atributo múltiplo para permitir selecionar vários arquivos de uma só vez: Exemplo. Usando entrada de formulário para seleção. Experimentá-lo Usando arraste e solte para selecionar Outra técnica para carregar arquivos é nativo arrastar e soltar da área de trabalho para o navegador. Podemos modificar o exemplo anterior ligeiramente para incluir suporte de arrastar e soltar. Exemplo. Usando arraste e solte para selecionar. Experimente-o Soltar arquivos aqui Nota: Alguns navegadores tratam elementos de tipo de arquivo de ltinput como destinos de queda nativos. Tente arrastar arquivos para o campo de entrada no exemplo anterior. Leitura de arquivos Agora vem a parte divertida Depois de ter obtido uma referência de arquivo, instanciar um objeto FileReader para ler seu conteúdo na memória. Quando a carga terminar, o evento leitores onload é disparado e seu atributo de resultado pode ser usado para acessar os dados do arquivo. FileReader inclui quatro opções para ler um arquivo, de forma assíncrona: FileReader. readAsBinaryString (BlobFile) - A propriedade de resultado conterá os dados de arquivo / blobs como uma seqüência de caracteres binária. Cada byte é representado por um inteiro no intervalo 0..255. FileReader. readAsText (BlobFile, optencoding) - A propriedade de resultado conterá os dados do arquivo / blobs como uma string de texto. Por padrão, a string é decodificada como UTF-8. Use o parâmetro de codificação opcional pode especificar um formato diferente. FileReader. readAsDataURL (BlobFile) - A propriedade de resultado conterá os dados de arquivo / blobs codificados como um URL de dados. FileReader. readAsArrayBuffer (BlobFile) - A propriedade de resultado conterá os dados de arquivo / blobs como um objeto ArrayBuffer. Uma vez que um desses métodos de leitura é chamado no seu objeto FileReader, o onloadstart. em progresso. carregando. Em cima. Onerror E onloadend pode ser usado para acompanhar o seu progresso. O exemplo abaixo filtra as imagens da seleção de usuários, chama reader. readAsDataURL () no arquivo e processa uma miniatura configurando o atributo src para um URL de dados. Exemplo. Leitura de arquivos. Experimente este exemplo com um diretório de imagens Cortando um arquivo Em alguns casos, a leitura do arquivo inteiro na memória não é a melhor opção. Por exemplo, digamos que você queria escrever um upload de arquivo assíncrono. Uma maneira possível de acelerar o upload seria ler e enviar o arquivo em pedaços de intervalo de bytes separados. O componente do servidor seria então responsável pela reconstrução do conteúdo do arquivo na ordem correta. Sorte para nós, a interface de arquivo suporta um método de fatia para suportar este caso de uso. O método toma um byte de partida como seu primeiro argumento, terminando o byte como seu segundo e uma string de tipo de conteúdo de opção como um terceiro. O exemplo a seguir demonstra a leitura de blocos de um arquivo. Algo que vale a pena notar é que ele usa o onloadend e verifica o evt. target. readyState em vez de usar o evento onload. Exemplo. Cortar um arquivo. Experimente Ler bytes: 1-5 6-15 7-8 arquivo inteiro Monitorando o progresso de uma leitura Uma das coisas agradáveis ​​que obtemos gratuitamente ao usar manipulação de eventos assíncronos é a capacidade de monitorar o progresso do arquivo lido útil para Grandes arquivos, captura de erros e descobrir quando uma leitura está completa. Os eventos onloadstart e onprogress podem ser usados ​​para monitorar o progresso de uma leitura. O exemplo abaixo demonstra exibir uma barra de progresso para monitorar o status de uma leitura. Para ver o indicador de progresso em ação, tente um arquivo grande ou um de uma unidade remota. Exemplo. Monitorando o progresso de uma leitura. Experimente Dica. Para realmente ver este indicador de progresso em ação, tente um arquivo grande ou um recurso em uma unidade remota. Next stepsFileReader. readAsBinaryString () Não-padrão Este recurso não é padrão e não está em uma pista de padrões. Não use em sites de produção voltados para a Web: ele não funcionará para todos os usuários. Também pode haver grandes incompatibilidades entre implementações eo comportamento pode mudar no futuro. O método readAsBinaryString é usado para iniciar a leitura do conteúdo do Blob ou Arquivo especificado. Quando a operação de leitura é concluída, o readyState torna-se DONE. E o loadend é disparado. Nesse momento, o atributo de resultado contém os dados binários não processados ​​do arquivo. Observe que este método está agora obsoleto conforme o rascunho de trabalho de 12 de julho de 2012 do W3C. Parâmetros de sintaxe blob A Blob ou Arquivo a partir do qual ler. Exemplo de Especificações Este método foi removido do padrão FileAPI. FileReader. readAsArrayBuffer () deve ser usado instead. File API Resumo Esta especificação fornece uma API para representar objetos de arquivo em aplicativos da web, bem como programaticamente selecioná-los e acessar seus dados. Isso inclui: Uma interface FileList, que representa uma matriz de arquivos individualmente selecionados do sistema subjacente. A interface do usuário para a seleção pode ser invocada via ltinput typefilegt. Quando o elemento de entrada está no estado de Carregamento de Ficheiro HTML. Uma interface Blob, que representa dados binários brutos imutáveis ​​e permite o acesso a intervalos de bytes dentro do objeto Blob como um Blob separado. Uma interface de arquivo, que inclui atributos informativos somente leitura sobre um arquivo, como seu nome ea data da última modificação (no disco) do arquivo. Uma interface FileReader, que fornece métodos para ler um Arquivo ou um Blob. E um modelo de evento para obter os resultados destas leituras. Um esquema de URL para uso com dados binários, como arquivos, para que possam ser referenciados em aplicativos da Web. Além disso, esta especificação define objetos a serem usados ​​dentro de aplicativos da Web encadeados para a leitura síncrona de arquivos. A seção sobre Requisitos e Casos de Uso REQ abrange a motivação por trás desta especificação. Esta API é projetada para ser usada em conjunto com outras APIs e elementos na plataforma da Web, notadamente: XMLHttpRequest (por exemplo, com um método de envio sobrecarregado para argumentos de Arquivos ou Blob), postMessage. DataTransfer (parte da API de arrastar e soltar definida em HTML) e Web Workers. Além disso, deve ser possível obter programaticamente uma lista de arquivos a partir do elemento de entrada quando ele está no estado de Upload de arquivo HTML. Esses tipos de comportamentos são definidos nas especificações afiliadas apropriadas. Status deste documento Esta seção descreve o status deste documento no momento de sua publicação. Outros documentos podem substituir este documento. Uma lista das publicações atuais do W3C e a última revisão deste relatório técnico podem ser encontradas no índice de relatórios técnicos do W3C em www. w3.org/TR/. Se você tiver comentários para esta especificação, envie-os para public-webappsw3.org com um Assunto: prefixo de FileAPI. Veja Bugzilla para este bugs abertos especificações. Este documento foi publicado pelo Grupo de Trabalho de Aplicações Web como um Rascunho de Trabalho. Este documento pretende tornar-se uma Recomendação do W3C. Se você deseja fazer comentários sobre este documento, envie-os para public-webappsw3.org (subscreva-se arquivos). Todos os comentários são bem-vindos. A publicação como um rascunho de trabalho não implica endosso por parte do W3C Membership. Este é um documento preliminar e pode ser atualizado, substituído ou obsoleto por outros documentos a qualquer momento. Não é adequado citar este documento como outro que não o trabalho em curso. Este documento foi produzido por um grupo operando sob a Política de Patentes do W3C de 5 de fevereiro de 2004. O W3C mantém uma lista pública de quaisquer divulgações de patentes feitas em conexão com as entregas do grupo, página que também inclui instruções para a divulgação de uma patente. Uma pessoa que tenha conhecimento real de uma patente que o indivíduo acredita que contém Reivindicações Essenciais deve divulgar as informações de acordo com a seção 6 da Política de Patentes do W3C. Este documento é regido pelo Documento do Processo W3C de 1 de agosto de 2014. Índice 1. Introdução Esta seção é informativa. Aplicativos da Web devem ter a capacidade de manipular o mais possível um intervalo de entrada do usuário, incluindo arquivos que um usuário pode querer carregar para um servidor remoto ou manipular dentro de um aplicativo da Web rico. Esta especificação define as representações básicas para arquivos, listas de arquivos, erros gerados pelo acesso a arquivos e formas programáticas de ler arquivos. Além disso, essa especificação também define uma interface que representa dados brutos que podem ser processados ​​de forma assíncrona no thread principal de agentes de usuário em conformidade. As interfaces e APIs definidas nesta especificação podem ser usadas com outras interfaces e APIs expostas à plataforma web. A interface de arquivo representa os dados de arquivo normalmente obtidos do sistema de arquivos subjacente (OS) ea interface Blob (Binary Large Object - um nome originalmente introduzido nas APIs da Web no Google Gears) representa dados brutos imutáveis. As leituras de arquivo ou Blob devem acontecer de forma assíncrona no thread principal, com uma API síncrona opcional usada em aplicativos da Web encadeados. Uma API assíncrona para leitura de arquivos impede bloqueio e congelamento de interface do usuário em um thread principal de agentes de usuário. Esta especificação define uma API assíncrona baseada em um modelo de evento para ler e acessar dados de um arquivo ou de Blob. Um objeto FileReader fornece métodos de leitura assíncrona para acessar esses dados de arquivos por meio de atributos de manipulador de eventos e a execução de eventos. O uso de eventos e manipuladores de eventos permite que o código separado bloqueie a capacidade de monitorar o progresso da leitura (o que é particularmente útil para unidades remotas ou montadas, onde o desempenho do acesso a arquivos pode variar de unidades locais) e condições de erro que podem surgir durante a leitura De um arquivo. Um exemplo será ilustrativo. No exemplo abaixo, diferentes blocos de código lidam com condições de progresso, erro e sucesso. 2. Conformidade Tudo nesta especificação é normativo exceto para exemplos e seções marcadas como sendo informativas. As palavras-chave DEVE, NÃO DEVE, NECESSÁRIO, DEVERÁ, NÃO, RECOMENDADO, MAIO e OPCIONAL neste documento devem ser interpretados como descrito em palavras-chave para uso em RFCs para indicar os níveis de requisitos RFC2119. As seguintes classes de conformidade são definidas por esta especificação: agente de usuário em conformidade Um agente de usuário é considerado como um agente de usuário em conformidade se satisfizer todos os critérios de MUST -, REQUIRED - e SHALL-level nesta especificação que se aplicam a implementações. Esta especificação utiliza os termos agente de utilizador em conformidade e agente de utilizador para se referir a esta classe de produto. Os agentes de usuário podem implementar algoritmos nestas especificações de qualquer maneira desejada, desde que o resultado final seja indistinguível do resultado que seria obtido a partir dos algoritmos de especificações. Os agentes de usuário que usam ECMAScript para implementar as APIs definidas nesta especificação devem implementá-las de uma maneira consistente com as Ligações ECMAScript definidas na especificação Web IDL WEBIDL como esta especificação usa essa especificação e terminologia. 3. Dependências Esta especificação depende de especificações subjacentes. Um agente de usuário em conformidade deve suportar pelo menos o subconjunto da funcionalidade definida no DOM4 em que esta especificação se baseia em particular, ele deve suportar EventTarget. DOM4 Um agente de usuário em conformidade deve suportar a especificação Progress Events. O acesso a dados nas operações de leitura é ativado por meio de Eventos de Progresso. Um agente de usuário em conformidade deve suportar pelo menos o subconjunto da funcionalidade definida em HTML em que esta especificação se baseia, em particular, deve suportar loops de eventos e atributos de manipulador de eventos. HTML Um agente de usuário em conformidade também deve ser uma implementação conforme dos fragmentos IDL nesta especificação, conforme descrito na especificação Web IDL. WebIDL Partes desta especificação dependem da especificação Web Workers para as partes desta especificação, a especificação Web Workers é uma dependência normativa. Trabalhadores 4. Terminologia 4.1 Termos O documento termos e algoritmos. Descarregando etapas de limpeza de documentos. Atributos do manipulador de eventos. Tipo de evento do manipulador de eventos. Origem de script eficaz. Objeto das configurações estabelecidas. Eventos. tarefa. Fonte de tarefa. URL. Lista de tarefas globais de limpeza de scripts. Limpeza global de scripts. Fila uma tarefa. UTF-8. UTF-16. Clone estruturado. Coletar uma seqüência de caracteres e converter uma seqüência de caracteres para ASCII minúsculas são como definido pela especificação HTML HTML. Os termos origem e mesma origem são definidos pela especificação ORIGIN. Quando esta especificação diz para terminar um algoritmo o agente do usuário deve terminar o algoritmo depois de terminar a etapa é sobre, e retornar a partir dele. Os métodos de leitura assíncronos definidos nesta especificação podem retornar antes que o algoritmo em questão seja encerrado e possa ser encerrado por uma chamada abort (). O termo lançar nesta especificação, como se refere a exceções, é usado conforme definido na especificação DOM4 DOM4. O termo byte nesta especificação é usado conforme definido na especificação de codificação de especificação de codificação. O termo pedaço nesta especificação é usado como definido na especificação Streams Specification Streams. O termo objeto de contexto nesta especificação é usado conforme definido na especificação DOM4 DOM4. Os termos URL. URL relativo. URL de base. Analisador de URL. Analisador de URL básico. Regime. anfitrião. Relativo. Dados do esquema. E fragmento são como definido pelo WHATWG URL URL Especificação. Os termos de solicitação. resposta. Corpo e pedido de origem cruzada são como definido na Especificação de Busca Especificação WHATWG Fetch. O termo Unix Epoch é usado nesta especificação para referir-se ao tempo 00:00:00 UTC em 1 de Janeiro de 1970 (ou 1970-01-01T00: 00: 00Z ISO 8601) este é o mesmo tempo que é conceptualmente 0 em ECMA - 262 ECMA-262. Os algoritmos e etapas nesta especificação usam as seguintes operações matemáticas: max (a, b) retorna o máximo de aeb, e sempre é executado em inteiros como eles são definidos em WebIDL WebIDL no caso de max (6,4) O resultado é 6. Esta operação também é definida em ECMAScript ECMA-262. Min (a, b) retorna o mínimo de aeb, sempre é executado em inteiros como eles são definidos em WebIDL WebIDL no caso de min (6,4) o resultado é 4. Esta operação também é definida em ECMAScript ECMA -262. Comparações matemáticas tais como lt (menor que), (menor ou igual a) e gt (maior que) são como em ECMAScript ECMA-262. 5. A interface Blob e dados binários Um objeto Blob refere-se a uma seqüência de bytes, e tem um atributo de tamanho que é o número total de bytes na seqüência de bytes e um atributo de tipo, que é uma seqüência codificada em ASCII em minúsculas representando O tipo de mídia da seqüência de bytes. Um Blob deve ter um estado de legibilidade. Que é um de ABERTO ou FECHADO. Um Blob que se refere a uma seqüência de bytes, incluindo um de 0 bytes, é dito estar no estado de legibilidade OPENED. Um Blob é dito ser fechado se seu método próximo for chamado. Um Blob que é fechado é dito estar no estado de legibilidade FECHADO. Cada Blob deve ter um estado de instantâneo interno. Que deve ser inicialmente definido para o estado do armazenamento subjacente, se existir tal armazenamento subjacente existe, e deve ser preservado através de clone estruturado. A definição normativa adicional do estado do instantâneo pode ser encontrada para arquivos. 5.1. Construtores O construtor Blob () pode ser invocado com zero ou mais parâmetros. Quando o construtor Blob () é chamado, os agentes de usuário devem executar as seguintes etapas do construtor Blob: Se invocado com zero parâmetros, retornar um novo objeto Blob com seu estado de legibilidade definido como OPENED. Consistindo de 0 bytes, com tamanho definido como 0 e com o tipo definido para a seqüência vazia. Caso contrário, o construtor é invocado com uma sequência blobParts. Let a ser essa seqüência. Vamos bytes ser uma seqüência vazia de bytes. Let comprimento ser um comprimento s. Para 0 i lt comprimento. Repita os seguintes passos: Seja elemento o i-ésimo elemento de a. Se elemento for um DOMString. Execute os seguintes subpassos: Seja s o resultado de converter o elemento em uma seqüência de caracteres Unicode Unicode usando o algoritmo para fazer isso em WebIDL WebIDL. Codifique s como UTF-8 e acrescente os bytes resultantes a bytes. O algoritmo de WebIDL WebIDL substitui substitutos incomparáveis ​​em uma seqüência de caracteres inválida UTF-16 com caracteres de substituição UFFFD. Cenários existem quando o construtor Blob pode resultar em alguma perda de dados devido a seqüências de caracteres perdidas ou codificadas. Se element é ArrayBufferView TypedArrays, converta-o para uma seqüência de byteLength bytes do ArrayBuffer subjacente. Começando no byteOffset do ArrayBufferView TypedArrays, e anexar esses bytes para bytes. Se elemento é um ArrayBuffer TypedArrays, convertê-lo para uma seqüência de byteLength bytes e anexar esses bytes para bytes. Se element for um Blob. Acrescente os bytes que representa aos bytes. O tipo do elemento de matriz Blob é ignorado. Se o membro tipo do argumento options opcional for fornecido e não for a string vazia, execute as seguintes sub-etapas: Seja t o membro do dicionário de tipo. Se t contiver quaisquer caracteres fora do intervalo U0020 a U007E, defina t para a seqüência vazia e retornar a partir desses subpassos. Converta cada caractere em t para minúsculas usando a conversão de uma seqüência de caracteres para ASCII algoritmo em minúsculas WebIDL. Retornar um objeto Blob com seu estado de legibilidade definido como OPENED. Referindo-se a bytes como sua seqüência de bytes associada, com seu tamanho definido para o comprimento de bytes. E seu tipo definido para o valor de t a partir dos subpassos acima. O tipo t de um Blob é considerado um tipo MIME analisável se a seqüência codificada em ASCII que representa o tipo de objetos Blob, quando convertida em uma seqüência de bytes, não retorna indefinida para o algoritmo de tipo MIME de análise MIMESNIFF. 5.1.1. Parâmetros do Construtor O construtor Blob () pode ser invocado com os parâmetros abaixo: Uma sequência blobParts que leva qualquer número dos seguintes tipos de elementos e em qualquer ordem: Um BlobPropertyBag opcional que leva um membro: type. A seqüência codificada em ASCII em minúsculas representando o tipo de mídia do Blob. As condições normativas para este membro são fornecidas nas etapas do construtor Blob. Seguem-se exemplos de uso do construtor. 5.2. Atributos Retorna o tamanho da seqüência de bytes em número de bytes. Ao obter, os agentes de usuário conformes devem retornar o número total de bytes que podem ser lidos por um objeto FileReader ou FileReaderSync, ou 0 se o Blob não tiver bytes a serem lidos. Se o Blob tem um estado de legibilidade de CLOSED, o tamanho deve retornar 0. A seqüência codificada em ASCII em minúsculas representando o tipo de mídia do Blob. Ao obter, os agentes de usuário devem retornar o tipo de um Blob como uma seqüência codificada em ASCII em minúsculas, de tal forma que quando é convertido em uma seqüência de bytes, é um tipo MIME parsable MIMESNIFF ou a seqüência vazia - 0 bytes - - se o tipo não puder ser determinado. O atributo type pode ser definido pelo próprio aplicativo web através da invocação do construtor e através da chamada de fatia nesses casos, outras condições normativas para esse atributo estão nas etapas do construtor Blob. As etapas File Constructor. E o algoritmo do método de fatia respectivamente. Os agentes de usuário também podem determinar o tipo de Blob. Especialmente se a seqüência de bytes é de um arquivo no disco, neste caso, outras condições normativas estão nas diretrizes do tipo de arquivo. O valor booleano que indica se o Blob está no estado de legibilidade FECHADO. Ao obter, os agentes de usuário devem retornar false se o Blob estiver no estado de legibilidade OPENED. E true se o Blob estiver no estado de legibilidade CLOSED como resultado do método close sendo chamado. 5.3. Métodos e Parâmetros 5.3.1. O método slice O método slice retorna um novo objeto Blob com bytes que vão desde o parâmetro de início opcional upto mas não incluindo o parâmetro final opcional e com um atributo type que é o valor do parâmetro opcional contentType. Ele deve agir da seguinte maneira: Seja O o objeto de contexto Blob no qual o método de fatia está sendo chamado. O parâmetro de partida opcional é um valor para o ponto de início de uma chamada de fatia, e deve ser tratado como uma posição de ordem de byte, com a posição zeroth representando o primeiro byte. Os agentes do usuário devem processar a fatia com o início normalizado de acordo com o seguinte: Se o parâmetro de partida opcional não for usado como um parâmetro ao fazer esta chamada, deixe relativoStart ser 0. Se o início for negativo, deixe relativoStart seja max ((size start), 0 ). Else, deixe relativoStart ser min (start, size). O parâmetro final opcional é um valor para o ponto final de uma chamada de fatia. Os agentes do usuário devem processar a fatia com o final normalizado de acordo com o seguinte: Se o parâmetro final opcional não for usado como um parâmetro ao fazer esta chamada, deixe relativoEnd ser tamanho. Se final é negativo, deixe relativoEnd ser max ((tamanho final), 0) Else, let relativoEnd be min (end, size) O parâmetro opcional contentType é usado para definir a seqüência codificada em ASCII em minúsculas representando o tipo de mídia do Bolha. Os agentes de usuário devem processar a fatia com contentType normalizado de acordo com o seguinte: Se o parâmetro contentType não for fornecido, deixe relativoContentType ser definido como a seqüência vazia. Else deixe relativeContentType ser definido como contentType e executar os subpassos abaixo: Se relativeContentType contém quaisquer caracteres fora do intervalo de U0020 para U007E, defina o relativoContentType para a seqüência vazia e retornar a partir desses subpassos. Converta cada caractere em relativeContentType para minúsculas usando a conversão de uma seqüência de caracteres para ASCII minúsculo algoritmo. Let span seja max ((relativeEnd - relativeStart), 0). Return a new Blob object S with the following characteristics: The readability state of the context object is retained by the Blob object returned by the slice call this has implications on whether the returned Blob is actually usable for read operation s or as a Blob URL . S refers to span consecutive byte s from O. beginning with the byte at byte-order position relativeStart . The type t of a Blob is considered a parsable MIME type if the ASCII-encoded string representing the Blob objects type, when converted to a byte sequence, does not return undefined for the parse MIME type algorithm MIMESNIFF . The examples below illustrate the different types of slice calls possible. Since the File interface inherits from the Blob interface, examples are based on the use of the File interface. 6. The File Interface A File object is a Blob object with a name attribute, which is a string it can be created within the web application via a constructor, or is a reference to a byte sequence from a file from the underlying (OS) file system. If a File object is a reference to a byte sequence originating from a file on disk, then its snapshot state should be set to the state of the file on disk at the time the File object is created. This is a non-trivial requirement to implement for user agents, and is thus not a must but a should RFC2119 . User agents should endeavor to have a File objects snapshot state set to the state of the underlying storage on disk at the time the reference is taken. If the file is modified on disk following the time a reference has been taken, the File s snapshot state will differ from the state of the underlying storage. User agents may use modification time stamps and other mechanisms to maintain snapshot state. but this is left as an implementation detail. When a File object refers to a file on disk, user agents must return the type of that file, and must follow the file type guidelines below: User agents must return the type as an ASCII-encoded string in lower case, such that when it is converted to a corresponding byte sequence, it is a parsable MIME type MIMESNIFF , or the empty string -- 0 bytes -- if the type cannot be determined. When the file is of type text/plain user agents must NOT append a charset parameter to the dictionary of parameters portion of the media type MIMESNIFF . User agents must not attempt heuristic determination of encoding, including statistical methods. 6.1 Constructor The File constructor is invoked with two or three parameters, depending on whether the optional dictionary parameter is used. When the File() constructor is invoked, user agents must run the following File constructor steps : Let a be the fileBits sequence argument. Let bytes be an empty sequence of bytes. Let length be a s length. For 0 i lt length. repeat the following steps: Let element be the i th element of a . If element is a DOMString. run the following substeps: Let s be the result of converting element to a sequence of Unicode characters Unicode using the algorithm for doing so in WebIDL WebIDL . Encode s as UTF-8 and append the resulting bytes to bytes . The algorithm from WebIDL WebIDL replaces unmatched surrogates in an invalid UTF-16 string with UFFFD replacement characters. Scenarios exist when the Blob constructor may result in some data loss due to lost or scrambled character sequences. If element is an ArrayBufferView TypedArrays , convert it to a sequence of byteLength bytes from the underlying ArrayBuffer, starting at the byteOffset of the ArrayBufferView TypedArrays , and append those bytes to bytes . If element is an ArrayBuffer TypedArrays , convert it to a sequence of byteLength bytes, and append those bytes to bytes . If element is a Blob. append the bytes it represents to bytes. The type of the Blob argument must be ignored. Let n be a new string of the same size as the fileName argument to the constructor. Copy every character from fileName to n. replacing any / character (U002F SOLIDUS) with a : (U003A COLON).Underlying OS filesystems use differing conventions for file name with constructed files, mandating UTF-16 lessens ambiquity when file names are converted to byte sequences. If the optional FilePropertyBag dictionary argument is used, then run the following substeps: If the type member is provided and is not the empty string, let t be set to the type dictionary member. If t contains any characters outside the range U0020 to U007E, then set t to the empty string and return from these substeps. Convert every character in t to lowercase using the converting a string to ASCII lowercase algorithm WebIDL . If the lastModified member is provided, let d be set to the lastModified dictionary member. If it is not provided, set d to the current date and time represented as the number of milliseconds since the Unix Epoch (which is the equivalent of Date. now() ECMA-262 ). Since ECMA-262 Date objects convert to long long values representing the number of milliseconds since the Unix Epoch. the lastModified member could be a Date object ECMA-262 . Return a new File object F such that: F has a readability state of OPENED . F refers to the bytes byte sequence. F. size is set to the number of total bytes in bytes . F. name is set to n . F. type is set to t. The type t of a File is considered a parsable MIME type if the ASCII-encoded string representing the File objects type, when converted to a byte sequence, does not return undefined for the parse MIME type algorithm 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.

No comments:

Post a Comment