Ontem eu fiz uma sessão noturna de codificação e criei um pequeno aplicativo node.js / JS (bem, na verdade, CoffeeScript, mas CoffeeScript é apenas JavaScript, então digamos JS).
qual é o objetivo:
- cliente envia um canvas datauri (png) para o servidor (via socket.io)
- servidor carrega imagem para amazon s3
a etapa 1 está concluída.
o servidor agora tem uma string a la
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt...
minha pergunta é: quais são minhas próximas etapas para "transmitir" / fazer upload desses dados para o Amazon S3 e criar uma imagem real lá?
knox https://github.com/LearnBoost/knox parece uma lib incrível para colocar algo no S3, mas o que estou perdendo é a cola entre a sequência de imagem codificada em base64 e a ação real de upload ?
Quaisquer ideias, sugestões e comentários são bem-vindos.
javascript
node.js
amazon-s3
coffeescript
Franz Enzenhofer
fonte
fonte
Respostas:
Para pessoas que ainda estão lutando com esse problema. Aqui está a abordagem que usei com o aws-sdk nativo.
dentro do método do roteador: - ContentType deve ser definido como o tipo de conteúdo do arquivo de imagem
O arquivo s3_config.json é: -
fonte
How to make S3 generates a unique KEY to prevent from overriding files?
eIf I don't set the ContentType, when I download the files I won't be able to get the correct file?
quer dizer, vou receber um arquivo tão corrompido? Desde já, obrigado!ContentEncoding: 'base64'
não está correto porquenew Buffer(..., 'base64')
decodifica string codificada em base64 em sua representação binária.ok, esta é a resposta de como salvar os dados da tela em um arquivo
basicamente perde assim no meu código
fonte
Aqui está o código de um artigo que encontrei, postando abaixo:
Leia mais: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property
Créditos: https://medium.com/@mayneweb/upload-a-base64-image-data-from-nodejs-to-aws-s3-bucket-6c1bd945420f
fonte
A resposta aceita funciona muito bem, mas se alguém precisa aceitar qualquer arquivo em vez de apenas imagens, esta regexp funciona muito bem:
/^data:.+;base64,/
fonte