Este é um trecho do código que eu quero fazer Blob
para a Base64
string:
Esta parte comentada funciona e, quando o URL gerado por isso é definido como img src, ele exibe a imagem:
var blob = items[i].getAsFile();
//var URLObj = window.URL || window.webkitURL;
//var source = URLObj.createObjectURL(blob);
//console.log("image source=" + source);
var reader = new FileReader();
reader.onload = function(event){
console.log(event.target.result)
}; // data url!
var source = reader.readAsBinaryString(blob);
O problema está no código inferior, a variável de origem gerada é nula
Atualizar:
Existe uma maneira mais fácil de fazer isso com o JQuery para poder criar String Base64 a partir do arquivo Blob, como no código acima?
javascript
jquery
quarks
fonte
fonte
onloadend
deve vir antesreadAsDataURL
, caso algo estranho aconteça e o carregamento seja concluído antes de chegar à próxima linha de código. Obviamente, isso nunca aconteceria, mas ainda é uma boa prática.isso funcionou para mim:
fonte
cb
?fonte
Existe uma maneira JavaSript pura que não depende de nenhuma pilha:
Para usar esta função auxiliar, você deve definir um retorno de chamada, exemplo:
Eu escrevi essa função auxiliar para o meu problema no projeto React Native, queria fazer o download de uma imagem e armazená-la como uma imagem em cache:
fonte
ou
consulte o construtor do Response , você pode se transformar
[blob, buffer source form data, readable stream, etc.]
em Response , que pode ser transformado em[json, text, array buffer, blob]
método assíncrono / retornos de chamada.edit: como o @Ralph mencionou, transformar tudo em string utf-8 causa problemas (infelizmente a API de resposta não fornece uma maneira de converter em string binária); portanto, o buffer do array é usado como intermediário, o que requer mais duas etapas (convertendo-o em matriz de bytes THEN a string binária), se você insistir em usar o
btoa
método nativo .fonte
btoa
você pode corrigir o problema:
Espero que isso lhe ajude
fonte
Portanto, o problema é que você deseja fazer upload de uma imagem de base 64 e ter um URL de blob. Agora, a resposta que funcionará em todos os navegadores html 5 é: Faça:
fonte
Eu queria algo em que tivesse acesso ao valor base64 para armazenar em uma lista e, para mim, adicionar o ouvinte de evento funcionou. Você só precisa do FileReader, que lerá o blob da imagem e retornará a base64 no resultado.
A parte final é o readAsDataURL, que é muito importante e está sendo usado para ler o conteúdo do Blob especificado
fonte
A maneira mais fácil em uma única linha de código
fonte