diff --git a/lib/cloudfiles/core.js b/lib/cloudfiles/core.js index 524ad3a..b759046 100644 --- a/lib/cloudfiles/core.js +++ b/lib/cloudfiles/core.js @@ -343,6 +343,27 @@ Cloudfiles.prototype.getFile = function (container, filename, callback) { }); }; +Cloudfiles.prototype.streamFile = function(container, filename, lstream, callback) { + var self = this, + containerPath = path.join(this.config.cache.path, container), + cacheFile = path.join(containerPath, filename), + options; + common.statOrMkdirp(containerPath); + + var rstream, + options; + + options = { + method: 'GET', + client: self, + uri: self.storageUrl(container, filename), + download: lstream + }; + + rstream = common.rackspace(options, callback); +}; + + // // options // remote @@ -414,9 +435,11 @@ Cloudfiles.prototype.destroyFile = function (container, file, callback) { // Cloudfiles.prototype.storageUrl = function () { var args = Array.prototype.slice.call(arguments), - json = (typeof(args[args.length - 1]) === 'boolean') && args.pop(); + json = (typeof(args[args.length - 1]) === 'boolean') && args.pop(), + pathname; - return [this.config.storageUrl].concat(args).join('/') + (json ? '?format=json' : ''); + pathname = '/' + encodeURI(args.join('/') + (json ? '?format=json' : '')); + return this.config.storageUrl + pathname; }; // @@ -427,7 +450,9 @@ Cloudfiles.prototype.storageUrl = function () { // Cloudfiles.prototype.cdnUrl = function () { var args = Array.prototype.slice.call(arguments), - json = (typeof(args[args.length - 1]) === 'boolean') && args.pop(); + json = (typeof(args[args.length - 1]) === 'boolean') && args.pop(), + pathname; - return [this.config.cdnUrl].concat(args).join('/') + (json ? '?format=json' : ''); + pathname = '/' + encodeURI(args.join('/') + (json ? '?format=json' : '')); + return this.config.cdnUrl + pathname; };