@yawetse/pkgcloud
Version:
An infrastructure-as-a-service agnostic cloud library for node.js
69 lines (58 loc) • 1.61 kB
JavaScript
/*
* archive.js: Upload an archive into Rackspace Cloud Files
*
* (C) 2013 Rackspace, Ken Perkins
* MIT LICENSE
*
*/
var fs = require('fs'),
filed = require('filed');
/**
* Client.extract
*
* @description Upload an archive and instruct Rackspace to extract files to given location
*
* @param {object} options options for this extraction request
* @param {Function} callback the callback for the extraction
*/
exports.extract = function(options, callback) {
var extractOpts, apiStream, inputStream;
if (typeof options === 'function' && !callback) {
callback = options;
options = {};
}
extractOpts = {
method: 'PUT',
qs: {},
upload: true,
headers: options.headers || {}
};
if (options.container) {
extractOpts.container = options.container;
}
extractOpts.qs['extract-archive'] = options.format || 'tar.gz';
if (options.local) {
inputStream = filed(options.local);
extractOpts.headers['content-length'] = fs.statSync(options.local).size;
}
else if (options.stream) {
inputStream = options.stream;
}
if (inputStream) {
inputStream.on('response', function(response) {
response.headers = {
'content-type': response.headers['content-type'],
'content-length': response.headers['content-length']
};
});
}
apiStream = this._request(extractOpts, function (err, body, res) {
return err
? callback && callback(err)
: callback && callback(null, true, res);
});
if (inputStream) {
inputStream.pipe(apiStream);
}
return apiStream;
};