Como transferir a imagem base64 do cliente para o servidor ou baixar o binário / base64 do depósito s3?

9

No meu aplicativo, estou enviando fotos diretamente do cliente para o s3, usando algo semelhante a essa recomendação sugerida pelo heroku: link

O principal benefício é que ele economiza custos de servidor (estou assumindo que os fragmentos não estão sendo enviados para o servidor usando algo como dados de formulário com várias partes).

No entanto, desejo poder compartilhar essas imagens no Twitter também, o que indica esse requisito:

  

Verifique se o POST é uma solicitação de dados de formulários / várias partes. Carregue o binário bruto (parâmetro de mídia) do arquivo ou seu conteúdo codificado em base64 (parâmetro media_data). Use binário bruto quando possível, porque a codificação base64 resulta em tamanhos de arquivo maiores

Eu tentei enviar a base64 necessária para o upload do s3 do lado do cliente para o servidor, mas dependendo do tamanho da foto - muitas vezes recebo um erro que é muito grande para enviar de volta.

TLDR

Preciso enviar minhas fotos usando dados do formulário mulitparty / multipart para o meu servidor, para que eu possa ter o base64 / binary necessário para compartilhar uma foto no twitter, ou posso continuar enviando fotos do meu cliente para o s3?

Então, de alguma forma, eficientemente obtém a base64 / binária necessária no servidor (possivelmente usando o módulo request), então eu posso enviar a imagem para o twitter?

    
por NoobSter 07.02.2017 в 23:24
fonte

2 respostas

2

Uma maneira bastante fácil de fazer isso sem alterar muito o código do cliente seria usar Eventos S3 . Eventos S3 podem acionar uma função lambda na AWS que pode postar a imagem no Twitter. Você pode usar qualquer biblioteca dentro da função lambda para fazer postagens eficientes no Twitter. Não tenho certeza se você quer usar o Lambda ou ficar com o Heroku.

    
por doles 10.02.2017 / 18:31
fonte
0

Se você estiver enviando documentos diretamente do cliente para fazer o upload para s3, estará expondo suas chaves secretas / particulares da AWS com o cliente. Uma maneira mais segura seria enviar as imagens para o nó e o nó, por sua vez, fazer o upload para o S3. Uma maneira recomendada de fazer upload de imagens para o servidor do nó seria usar multipart / form-data e usando o middleware Multer .

Independentemente do método de upload, você pode usar o seguinte código para exibir imagens no Twitter. Este código usa o módulo AWS-SDK .

    var s3 = new AWS.S3();
    var filename = req.query.filename;
    var params = {
        Bucket: <bucketname>,
        Key: <image path>
    };

    var extension = filename.split('.')[1];
    if (extension == "jpg" || extension == "JPG" || extension == "jpeg" || extension == "JPEG")
    {
        res.setHeader('Content-Type', 'image');
    }
    else if (extension == "png" || extension == "PNG")
    {
        res.setHeader('Content-Type', 'image/png');
    }

    s3.getObject(params).createReadStream().pipe(res);

Este método pode ser dimensionado com facilidade, como qualquer outro aplicativo expresso.

    
por Kaushik Wavhal 10.02.2017 / 08:50
fonte