var fs = require('fs') var url = require('url') var http = require('http') var https = require('https') var mkdirp = require('mkdirp') module.exports = function download(file, options, callback) { if (!file) throw("Need a file url to download") if (!callback && typeof options === 'function') { callback = options } options = typeof options === 'object' ? options : {} options.timeout = options.timeout || 20000 options.directory = options.directory ? options.directory : '.' var uri = file.split('/') options.filename = options.filename || uri[uri.length - 1] var path = options.directory + "/" + options.filename if (url.parse(file).protocol === null) { file = 'http://' + file req = http } else if (url.parse(file).protocol === 'https:') { req = https } else { req = http } var request = req.get(file, function(response) { if (response.statusCode === 200) { mkdirp(options.directory, function(err) { if (err) throw err var file = fs.createWriteStream(path) response.pipe(file) }) } else { if (callback) callback(response.statusCode) } response.on("end", function(){ if (callback) callback(false, path) }) request.setTimeout(options.timeout, function () { request.abort() callback("Timeout") }) }).on('error', function(e) { if (callback) callback(e) }) }