Skip to content

Instantly share code, notes, and snippets.

@danielgranat
Created July 29, 2021 06:23
Show Gist options
  • Save danielgranat/741423257d4c32f4b2c29502b8af96c1 to your computer and use it in GitHub Desktop.
Save danielgranat/741423257d4c32f4b2c29502b8af96c1 to your computer and use it in GitHub Desktop.
var fs = require('fs');
const https = require('https');
const AWS = require('aws-sdk');
var wd = new AWS.WorkDocs();
async function downloadFolder(folderName, folderId) {
let limit = 100;
console.log('Start Download folder:', folderId);
if (!fs.existsSync(folderName)) {
fs.mkdirSync(folderName);
}
let marker;
do {
let folderContents = await wd.describeFolderContents({ FolderId: folderId, Marker: marker, Limit: limit }).promise()
marker = folderContents.Marker;
console.log('copy files', folderContents.Documents.length, marker)
for (let folder of folderContents.Folders) {
await downloadFolder(`${folderName}/${folder.Name}`, folder.Id);
}
for (let doc of folderContents.Documents) {
let name = doc.LatestVersionMetadata.Name;
let versionId = doc.LatestVersionMetadata.Id;
let docVersion = await wd.getDocumentVersion({ DocumentId: doc.Id, VersionId: versionId, IncludeCustomMetadata: true, Fields: 'SOURCE' }).promise()
console.log(name);
await new Promise((resolve, reject) => {
const file = fs.createWriteStream(`${folderName}/${name}`);
const request = https.get(docVersion.Metadata.Source.ORIGINAL, function (response) {
response.pipe(file);
response.on('end', () => resolve(true))
});
request.on('error', reject);
return request;
});
}
} while (folderContents.Marker);
console.log('Finishj Download folder:', folderId);
}
(async () => {
const args = process.argv.slice(2);
const dir = args[0];
const folderId = args[1];
downloadFolder(dir, folderId);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment