Last active
March 30, 2016 04:20
-
-
Save lricoy/07810bb62a7ff6c4f9141401a642e025 to your computer and use it in GitHub Desktop.
Utiliza o SDK da amazon para obter URL's assinadas
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| '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