Skip to content

Instantly share code, notes, and snippets.

@witt3rd
Created June 5, 2019 17:57
Show Gist options
  • Save witt3rd/f627245ed65c09cdf58ded73c739401f to your computer and use it in GitHub Desktop.
Save witt3rd/f627245ed65c09cdf58ded73c739401f to your computer and use it in GitHub Desktop.
const fs = require('fs');
const mkdirp = require('mkdirp');
const path = require('path');
const request = require('request');
const url = require('url');
const downloadFile = async (file, targetFolder) => {
// Parse remote file spec
const sourceUrl = url.parse(file.url ? file.url.id : file.id);
const sourceHref = sourceUrl.href;
const sourcePath = path.parse(sourceUrl.path);
const sourceBase = sourcePath.base;
// Ensure folder exists
mkdirp.sync(targetFolder);
// Generate local file path/name
const localFile = path.resolve(targetFolder, sourceBase);
// Download
return new Promise((resolve, reject) => {
request(sourceHref)
.pipe(fs.createWriteStream(localFile))
.on('error', error => reject(error))
.on('close', () => resolve(localFile));
});
};
const uploadFile = async (localFile, remoteFolder) => {
return new Promise((resolve, reject) => {
const req = request.post(remoteFolder, function(err, resp, body) {
if (err) {
reject(err);
} else {
if (resp.statusCode !== 200) {
// console.log('resp:', resp)
reject(
new Error(
`Failed to upload: ${resp.statusCode} - ${resp.statusMessage}`
)
);
}
const url = body.slice('File uploaded: '.length);
resolve(url);
}
});
const form = req.form();
form.append('file', fs.createReadStream(localFile));
});
};
module.exports = {
downloadFile,
uploadFile
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment