Skip to content

Instantly share code, notes, and snippets.

@lricoy
Last active March 30, 2016 04:20
Show Gist options
  • Save lricoy/07810bb62a7ff6c4f9141401a642e025 to your computer and use it in GitHub Desktop.
Save lricoy/07810bb62a7ff6c4f9141401a642e025 to your computer and use it in GitHub Desktop.
Utiliza o SDK da amazon para obter URL's assinadas
'use strict';
/*
* Importa as dependências necessárias
*/
let express = require('express'),
http = require('http'),
path = require('path'),
aws = require('aws-sdk');
/*
* Configura o servidor do express
*/
let app = express();
app.set('port', process.env.PORT || 3000);
/*
* Carrega as variáveis de ambiente com os dados da Amazon
*/
require('dotenv').config();
let AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY,
AWS_SECRET_KEY = process.env.AWS_SECRET_KEY,
S3_BUCKET = process.env.S3_BUCKET;
// Configura o SDK para utilizar os valores das variáveis de ambiente
aws.config.update({accessKeyId: AWS_ACCESS_KEY , secretAccessKey: AWS_SECRET_KEY });
// Configura a "versão das assinaturas" e a região padrão
// ATENÇÃO: A "versão das assinaturas" pode mudar para regiões diferentes
aws.config.update({ signatureVersion: 'v4', region: 'sa-east-1' });
/*
* Ao receber uma requisição GET, retorna um JSON com uma url temporária
* já "assinada" que permite realizar upload para o S3
*/
app.get('/sign_s3', function(req, res){
let s3 = new aws.S3(),
s3Params = {
Bucket: S3_BUCKET, // O nome do Bucket definido no arquivo de configuração
Key: req.query.file_name, // O nome do arquivo obtido através da query string
Expires: 60, // Tempo em segundos para a url expirar
ContentType: req.query.file_type, // O ContentType do arquivo, obtido atráves da query string
ACL: 'public-read'// Permissão do S3
};
// Chama o método do SDK para obter uma URL assinada
// utilizando os parametros passados
s3.getSignedUrl('putObject', s3Params, (err, data) => {
if(err) {
return res.status(500).json(err);
}
// Monta o objeto de retorno
// signed_request_url é a URL que deve ser utilizada para realizar o upload
// result_url é a URL no S3 para acessar o arquivos após o upload ter sido concluído
let return_data = {
signed_request_url: data,
result_url: 'https://' + S3_BUCKET + '.s3.amazonaws.com/' + req.query.file_name
};
// console.log(return_data);
res.status(200).json(return_data);
});
});
/*
* Inicializa o servidor do express
*/
app.listen(app.get('port'), function () {
console.log('App running');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment