Obter Base64 de um anexo dentro do formulário

Bom dia senhores

A minha situação é a seguinte, preciso obter o base64 de um anexo da solicitação para fazer uma chamada rest. Porem o problema é que o usuário ira anexar o arquivo pela chamada do metodo showcamera e fazer a chamada rest na mesma atividade, portanto não consigo utilizar os scripts de processo.

Alguem teria uma forma de fazer isso?

Não sei como o showcamera funciona pra indicar que o anexo foi adicionado pra então poder recuperar esse anexo (na verdade ainda não trabalhei com eventos envolvendo os anexos).

Mas um jeito simples de pegar o base64 de um arquivo no JS seria o seguinte.

Pegar a URL de download do arquivo com o endpoint /2.0/documents/getDownloadURL/{documentId}

De posse da URL você consegue o Base64 assim:

fetch(urlDoArquivo)
.then(response => response.blob())
.then(blob => {
    const reader = new FileReader();
    reader.readAsDataURL(blob);

    reader.onloadend = function() {
        // reader.result é o base64
        console.log(reader.result);
    }
})

Caso você consiga pegar diretamente o arquivo no navegador, após adicionar o anexo, você nem precisaria pegar a URL, pois bastaria utilizar o FileReader direto nesse arquivo.

const attachment = document.querySelector('input[type=file]').files[0];
const reader = new FileReader();

reader.readAsDataURL(attachment);

reader.onloadend = function() {
    // reader.result é o base64
    console.log(reader.result);
}
1 curtida