Created
June 5, 2019 17:57
-
-
Save witt3rd/f627245ed65c09cdf58ded73c739401f to your computer and use it in GitHub Desktop.
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
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