2023-08-29 22:01:57 +00:00
|
|
|
let fs = require("fs");
|
|
|
|
|
let parse = require("url").parse;
|
|
|
|
|
let path = require("path");
|
2017-06-14 03:53:10 +00:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
fs.mkdirSync("./tmp");
|
|
|
|
|
} catch (e) {
|
|
|
|
|
if (e.code != "EEXIST") throw e;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function local(url) {
|
|
|
|
|
return path.join("./tmp", encodeURIComponent(url));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function read(url) {
|
|
|
|
|
return fs.createReadStream(local(url));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = function(url, callback) {
|
2023-08-29 22:01:57 +00:00
|
|
|
let result = read(url);
|
2017-06-14 03:53:10 +00:00
|
|
|
result.on("error", function(e) {
|
|
|
|
|
if (e.code != "ENOENT") return callback(e);
|
2023-08-29 22:01:57 +00:00
|
|
|
let options = parse(url);
|
2018-05-31 08:23:49 +00:00
|
|
|
options.rejectUnauthorized = false;
|
|
|
|
|
require(options.protocol.slice(0, -1)).get(options, function(res) {
|
2018-08-08 08:15:45 +00:00
|
|
|
if (res.statusCode !== 200) return callback(res.statusCode);
|
|
|
|
|
res.pipe(fs.createWriteStream(local(url)));
|
|
|
|
|
callback(null, res);
|
2017-06-14 03:53:10 +00:00
|
|
|
});
|
|
|
|
|
}).on("open", function() {
|
|
|
|
|
callback(null, result);
|
|
|
|
|
});
|
|
|
|
|
};
|