Partilhar via


Manipular arquivos no Aplicativos Web Progressivo

Os Aplicativos Web progressivos que podem lidar com arquivos parecem mais nativos para os usuários e melhor integrados ao sistema operacional.

Os sites já podem permitir que os usuários carreguem arquivos usando o <input type="file"> ou arraste e solte, mas as PWAs vão mais longe e podem se registrar como manipuladores de arquivos no sistema operacional.

Quando um PWA é registrado como um manipulador de arquivos para determinados tipos de arquivo, o sistema operacional pode iniciar automaticamente o aplicativo quando esses arquivos são abertos .docx pelo usuário, semelhante à forma como o Microsoft Word manipula arquivos.

Definir quais arquivos seu aplicativo manipula

A primeira coisa a fazer é declarar quais tipos de arquivos seu aplicativo manipula. Isso é feito no arquivo de manifesto do aplicativo, usando o membro da file_handlers matriz.

Cada entrada na file_handlers matriz precisa ter duas propriedades:

  • action: a URL para a qual o sistema operacional deve navegar ao iniciar seu PWA.
  • accept: um objeto de tipos de arquivo aceitos. As chaves são tipos MIME (tipos parciais, usando o símbolo *curinga , são aceitos) e os valores são matrizes de extensões de arquivo aceitas.

Considere o exemplo seguinte:

{
    "file_handlers": [
        {
            "action": "/openFile",
            "accept": {
                "text/*": [
                    ".txt"
                ]
            }
        }
    ]
}

Neste exemplo, o aplicativo registra um único manipulador de arquivos para o qual aceita arquivos de texto. Quando um .txt arquivo é aberto pelo usuário, por exemplo, clicando duas vezes em seu ícone na área de trabalho, o sistema operacional inicia o aplicativo usando a /openFile URL.

Detectar se a API de Tratamento de Arquivos está disponível

Antes de lidar com os arquivos, seu aplicativo precisa marcar se a API de Tratamento de Arquivos está disponível no dispositivo e no navegador.

Para marcar se a API de Tratamento de Arquivos está disponível, teste se o launchQueue objeto existe, da seguinte maneira:

if ('launchQueue' in window) {
    console.log('File Handling API is supported!');
} else {
    console.error('File Handling API is not supported!');
}

Manipular arquivos no início

Quando seu aplicativo é iniciado pelo sistema operacional após a abertura de um arquivo, você pode usar o launchQueue objeto para acessar o conteúdo do arquivo.

Use o seguinte código JavaScript para processar o conteúdo do texto:

if ('launchQueue' in window) {
    console.log('File Handling API is supported!');

    launchQueue.setConsumer(launchParams => {
        handleFiles(launchParams.files);
    });
} else {
    console.error('File Handling API is not supported!');
}

async function handleFiles(files) {
    for (const file of files) {
        const blob = await file.getFile();
        blob.handle = file;
        const text = await blob.text();

        console.log(`${file.name} handled, content: ${text}`);
    }
}

O launchQueue objeto enfileira todos os arquivos iniciados até que um consumidor seja definido com setConsumer. Para saber mais sobre os launchQueue objetos e launchParams , acesse o explicador de Tratamento de Arquivos.

Demonstração

My Tracks é um aplicativo de demonstração PWA que usa o recurso Tratamento de Arquivos para manipular .gpx arquivos. Para experimentar o recurso com este aplicativo de demonstração:

Observe que o aplicativo é iniciado automaticamente e que o Microsoft Edge solicita sua permissão para lidar com esse arquivo.

A caixa de diálogo solicitação de permissão 'Abrir arquivo?'

Se você permitir que o aplicativo manipule o arquivo, uma nova entrada será exibida na barra lateral do aplicativo e poderá clicar na caixa de seleção ao lado dele para visualizar a faixa de GPS correspondente.

A nova faixa de GPS manipulada pelo aplicativo My Tracks

O código-fonte deste aplicativo pode ser acessado no repositório GitHub Minhas Faixas.

  • O arquivo de origem manifest.json usa a file_handlers matriz para solicitar o tratamento de .gpx arquivos.
  • O arquivo de origemfile.jsusa o launchQueue objeto para lidar com arquivos de entrada.