Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] não entendi o codigo

Não entendi como funciona a function lerConteudoDoArquivo. exemplo: sei que o arquivo é passado para dentro da função, porem, como ele é lido pelo leitor? Se em nenhum momento atribuimos esse valor a ele

function lerConteudoDoArquivo(arquivo){
    return new Promise((resolve, reject)=>{
        const leitor = new FileReader();
        leitor.onload = () => {
            resolve ({ url: leitor.result, nome: arquivo.name})
        }

        leitor.onerror = () =>{
            reject(`Erro na leitura do arquivo: ${arquivo.name}`)
        }

        leitor.readAsDataURL(arquivo)
    })
}

const imagemPrincipal = document.querySelector('.main-imagem')
const nomeDaImagem = document.querySelector('.container-imagem-nome p')

inputUpload.addEventListener('change',async (evento)=>{
    const arquivo = evento.target.files[0]

    if(arquivo){
        try{
            const conteudoDoArquivo = await lerConteudoDoArquivo(arquivo)
            imagemPrincipal.src = conteudoDoArquivo.url
            nomeDaImagem.textContent = conteudoDoArquivo.nome
        }catch(erro){
            console.error('Erro na leitura do arquivo')
        }
    }
})
2 respostas
solução!

Oi Eduardo,

A função lerConteudoDoArquivo utiliza a API FileReader para ler o conteúdo do arquivo passado como argumento. O FileReader é um objeto que permite ler o conteúdo de arquivos de forma assíncrona.

Aqui está como a função funciona:

  1. Criação da Promise: A função retorna uma Promise, que é um objeto que representa a eventual conclusão (ou falha) de uma operação assíncrona.

  2. Instanciação do FileReader: Um novo objeto FileReader é criado com const leitor = new FileReader();.

  3. Definição do evento onload: O evento onload é acionado quando a leitura do arquivo é concluída com sucesso. Nesse evento, usamos resolve para retornar um objeto que contém a URL do conteúdo do arquivo (leitor.result) e o nome do arquivo (arquivo.name).

  4. Definição do evento onerror: Se ocorrer um erro durante a leitura, o evento onerror é acionado, e chamamos reject com uma mensagem de erro.

  5. Início da leitura: A leitura do arquivo é iniciada com leitor.readAsDataURL(arquivo);. Este método lê o conteúdo do arquivo e, dependendo do tipo de arquivo, converte para uma URL de dados. O resultado é armazenado em leitor.result, que estará disponível quando o evento onload for acionado.

Assim, não precisamos atribuir o valor lido diretamente a uma variável na função porque o FileReader já gerencia isso internamente. Quando a leitura termina, o resultado fica disponível através do leitor.result.

Aqui está um exemplo simplificado de como a leitura funciona:

const leitor = new FileReader();
leitor.onload = () => {
    console.log(leitor.result); // Aqui você vê o conteúdo do arquivo
};
leitor.readAsDataURL(arquivo);
tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓

Muito obrigado