qiao-cos
Version:
tencent cos upload tool on nodejs
85 lines (71 loc) • 2.03 kB
JavaScript
// progress
import progress from 'progress';
// qiao
import { path, lsdir } from 'qiao-file';
// upload file
import { uploadFileWithCallback } from './upload-file.js';
/**
* upload folder
* @param {*} app
* @param {*} destFolder
* @param {*} sourceFolder
* @returns
*/
export const uploadFolder = async (app, destFolder, sourceFolder) => {
// check
if (!app || !app.client || !app.config) {
return Promise.reject(new Error('need app, app.client, app.config'));
}
// is absolute
if (!path.isAbsolute(sourceFolder)) {
return Promise.reject(new Error('source file path must be absolute'));
}
// time
console.time('total use');
// files
const paths = await lsdir(sourceFolder);
const files = paths.files;
const bar = new progress('uploading files... :current/:total', {
total: files.length,
});
// vars
const allFiles = [];
const sucFiles = [];
const failFiles = [];
// upload
return new Promise((resolve, reject) => {
const options = {};
options.callback = (err, data) => {
allFiles.push(data);
if (err || !data || data.statusCode != 200) {
failFiles.push(err || data);
} else {
sucFiles.push(data);
}
bar.tick();
if (bar.complete) {
const obj = {};
obj.paths = paths;
obj.all = allFiles;
obj.suc = sucFiles;
obj.fail = failFiles;
console.log();
console.timeEnd('total use');
console.log('all files:', allFiles.length);
console.log('fail files:', failFiles.length);
console.log('success files:', sucFiles.length);
console.log();
if (allFiles.length === sucFiles.length) {
resolve(obj);
} else {
reject(new Error('some files upload failed'));
}
}
};
for (let i = 0; i < files.length; i++) {
const file = files[i].path;
const dest = destFolder + file.split(sourceFolder)[1];
uploadFileWithCallback(app, dest, file, options);
}
});
};