Exemplo n.º 1
0
    var upload = function (stream) {
        var relativePath = path.relative(options.srcDirname, file);
        var destExtname = path.extname(file);
        var sign = qiniu.signature(relativePath);
        var fd = new FormData();

        fd.append('key', sign.key);
        fd.append('token', sign.token);
        fd.append('file', stream, {
            contentType: mime.get(destExtname)
        });

        request.post({
            url: uploadURL,
            form: fd,
            timeout: -1
        }, function (err, body, res) {
            if (err) {
                err.file = file;
                return callback(err, body);
            }

            if (res.statusCode === 200) {
                return callback(null, body);
            }

            var json;

            try {
                json = JSON.parse(body);
            } catch (err) {
                json = {
                    error: 'parse upload response error'
                }
            }

            err = new Error(json.error);
            err.file = file;
            callback(err);
        });
    };
Exemplo n.º 2
0
module.exports = function (options) {
    banner();

    // 1. parse config
    var configs = parseConfig({
        srcDirname: options.srcDirname
    });

    qiniu.config({
        accessKey: configs.accessKey,
        secretKey: configs.secretKey,
        bucket: configs.bucket,
        dirname: configs.destDirname,
        mimeLimit: '*'
    });

    // 2. parse cache
    var matchCache = parseCache.get(configs.uploadFiles, {
        srcDirname: options.srcDirname
    });
    var willUploadFiles = [];

    dato.each(configs.uploadFiles, function (index, file) {
        if (!matchCache[index]) {
            willUploadFiles.push(file);
        }
    });

    // 3. upload queue
    var willUploadLength = willUploadFiles.length;
    var willUploadGroup = [];
    while (willUploadFiles.length) {
        willUploadGroup.push(willUploadFiles.splice(0, configs.parallel));
    }
    var startTime = Date.now();
    var progress;

    howdo
        .each(willUploadGroup, function (i, group, next) {
            howdo
                .each(group, function (j, file, done) {
                    upload(file, configs, function (err) {
                        if (err) {
                            return done(err);
                        }

                        if(!progress){
                            progress = new Progress('[:bar]  :current/' + willUploadLength + '  剩余::etas', {
                                complete: '=',
                                incomplete: ' ',
                                width: 70,
                                total: willUploadLength
                            });
                        }

                        parseCache.set(file, {
                            srcDirname: options.srcDirname
                        });
                        progress.tick(1);
                        done();
                    });
                })
                .together(next);
        })
        .follow()
        .try(function () {
            console.log();
            debug.success('upload files', willUploadLength);
            debug.success('upload success', 'past ' + (Date.now() - startTime) + 'ms');
        })
        .catch(function (err) {
            console.log();
            debug.error('upload file', err.file);
            debug.error('upload error', err.message);
        });
};