MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como você coloca um arquivo de imagem em um objeto json?


Posso pensar em fazer de duas maneiras:

1.


Armazenando o arquivo no sistema de arquivos em qualquer diretório (digamos dir1 ) e renomeá-lo, o que garante que o nome seja exclusivo para cada arquivo (pode ser um carimbo de data/hora) (digamos xyz123.jpg ) e, em seguida, armazenando esse nome em algum banco de dados. Então, ao gerar o JSON, você extrai esse nome de arquivo e gera uma URL completa (que será http://example.com/dir1/xyz123.png ) e insira-o no JSON.

2.


Codificação de Base 64, é basicamente uma maneira de codificar dados binários arbitrários em texto ASCII. São necessários 4 caracteres por 3 bytes de dados, além de potencialmente um pouco de preenchimento no final. Essencialmente, cada 6 bits da entrada é codificado em um alfabeto de 64 caracteres. O alfabeto "padrão" usa A-Z, a-z, 0-9 e + e /, com =como caractere de preenchimento. Existem variantes seguras para URL. Portanto, essa abordagem permitirá que você coloque sua imagem diretamente no MongoDB, enquanto a armazena Codifica a imagem e decodifica enquanto a busca, tem algumas de suas desvantagens:
  • A codificação base64 torna os tamanhos de arquivo aproximadamente 33% maiores do que suas representações binárias originais, o que significa mais dados no fio (isso pode ser excepcionalmente doloroso em redes móveis)
  • URIs de dados não são compatíveis com IE6 ou IE7.
  • os dados codificados em base64 podem demorar mais para serem processados ​​do que os dados binários.

Fonte

Convertendo Imagem em URI DE DADOS


A.) Tela

Carregue a imagem em um Image-Object, pinte-a em uma tela e converta a tela de volta em um dataURL.
function convertToDataURLviaCanvas(url, callback, outputFormat){
    var img = new Image();
    img.crossOrigin = 'Anonymous';
    img.onload = function(){
        var canvas = document.createElement('CANVAS');
        var ctx = canvas.getContext('2d');
        var dataURL;
        canvas.height = this.height;
        canvas.width = this.width;
        ctx.drawImage(this, 0, 0);
        dataURL = canvas.toDataURL(outputFormat);
        callback(dataURL);
        canvas = null; 
    };
    img.src = url;
}

Uso
convertToDataURLviaCanvas('http://bit.ly/18g0VNp', function(base64Img){
    // Base64DataURL
});

Formatos de entrada compatíveis image/png , image/jpeg , image/jpg , image/gif , image/bmp , image/tiff , image/x-icon , image/svg+xml , image/webp , image/xxx

B.) Leitor de Arquivos

Carregue a imagem como blob via XMLHttpRequest e use a API FileReader para convertê-la em uma URL de dados.
function convertFileToBase64viaFileReader(url, callback){
    var xhr = new XMLHttpRequest();
    xhr.responseType = 'blob';
    xhr.onload = function() {
      var reader  = new FileReader();
      reader.onloadend = function () {
          callback(reader.result);
      }
      reader.readAsDataURL(xhr.response);
    };
    xhr.open('GET', url);
    xhr.send();
}

Esta abordagem
  • falta de suporte ao navegador
  • tem melhor compactação
  • funciona também para outros tipos de arquivo.

Uso
convertFileToBase64viaFileReader('http://bit.ly/18g0VNp', function(base64Img){
    // Base64DataURL
});

Fonte