Skip to content

Instantly share code, notes, and snippets.

@morrxy
Forked from alanhoff/comousar.js
Created August 12, 2016 08:37
Show Gist options
  • Save morrxy/4d2832d9de43cb2b7e83565af09a5279 to your computer and use it in GitHub Desktop.
Save morrxy/4d2832d9de43cb2b7e83565af09a5279 to your computer and use it in GitHub Desktop.
var download = require('./lib/download');
download('http://meuarquivolocodedoido.com.br/arquivo.txt', './downloads')
.then(function(id){
console.log('Arquivo gravado com id %s', id);
})
.catch(function(err){
console.log('Deu pau..');
console.log(err.stack);
});
// Ou como callback
download('http://meuarquivolocodedoido.com.br/arquivo.txt', './downloads', function(err, id){
if(err)
throw err;
console.log('Arquivo gravado com id %s', id);
});
var request = require('request');
var fs = require('fs'); // fs para escrever diretamente para o disco, much win
var Puid = require('puid');
var puid = new Puid(); // Isso aqui gera ID únicos, assim nunca vai sobreescrever
var path = require('path');
var Promise = require('bluebird');
var download = function(arquivo, pasta, callback){
var p = new Promise(function(resolve, reject){
var id = puid.generate();
var dest = path.join(pasta, id);
var writeStream = fs.createWriteStream(dest);
// Avisando a promise que acabamos por aqui
writeStream.on('finish', function(){
resolve(id);
});
// Capturando erros da write stream
writeStream.on('error', function(err){
fs.unlink(dest, reject.bind(null, err));
});
var readStream = request.get(arquivo);
// Capturando erros da request stream
readStream.on('error', function(err){
fs.unlink(dest, reject.bind(null, err));
});
// Iniciando a transferência de dados
readStream.pipe(writeStream);
});
// Manter compatibilidade com callbacks
if(!callback)
return p;
p.then(function(id){
callback(null, id);
}).catch(function(err){
callback(err);
});
};
module.exports = download;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment