diff --git a/lib-es5/utils/index.js b/lib-es5/utils/index.js index 3b9cc733..2c0ddd59 100644 --- a/lib-es5/utils/index.js +++ b/lib-es5/utils/index.js @@ -1116,6 +1116,20 @@ function download_zip_url() { })); } +/** + * Creates and downloads a URL that when invokes creates an archive of a folder + */ +function download_folder(folder_path) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + options.resource_type = options.resource_type || "all"; + options.prefixes = folder_path; + var cloudinary_params = exports.sign_request(exports.archive_params(merge(options, { + mode: "download" + })), options); + return exports.api_url("generate_archive", options) + "?" + hashToQuery(cloudinary_params); +} + /** * Render the key/value pair as an HTML tag attribute * @private @@ -1302,7 +1316,8 @@ function archive_params() { timestamp: options.timestamp || exports.timestamp(), transformations: utils.build_eager(options.transformations), type: options.type, - use_original_filename: exports.as_safe_bool(options.use_original_filename) + use_original_filename: exports.as_safe_bool(options.use_original_filename), + folder_path: options.folder_path }; } @@ -1507,6 +1522,7 @@ exports.present = present; exports.only = pickOnlyExistingValues; // for backwards compatibility exports.pickOnlyExistingValues = pickOnlyExistingValues; exports.jsonArrayParam = jsonArrayParam; +exports.download_folder = download_folder; // was exported before, so kept for backwards compatibility exports.DEFAULT_POSTER_OPTIONS = DEFAULT_POSTER_OPTIONS; exports.DEFAULT_VIDEO_SOURCE_TYPES = DEFAULT_VIDEO_SOURCE_TYPES; diff --git a/lib/utils/index.js b/lib/utils/index.js index d79098cb..76a898f2 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -1024,6 +1024,18 @@ function download_zip_url(options = {}) { })); } +/** + * Creates and downloads a URL that when invokes creates an archive of a folder + */ +function download_folder(folder_path, options = {}) { + options.resource_type = options.resource_type || "all"; + options.prefixes = folder_path; + let cloudinary_params = exports.sign_request(exports.archive_params(merge(options, { + mode: "download", + })), options); + return exports.api_url("generate_archive", options) + "?" + hashToQuery(cloudinary_params); +} + /** * Render the key/value pair as an HTML tag attribute * @private @@ -1198,6 +1210,7 @@ function archive_params(options = {}) { transformations: utils.build_eager(options.transformations), type: options.type, use_original_filename: exports.as_safe_bool(options.use_original_filename), + folder_path: options.folder_path, }; } @@ -1382,6 +1395,7 @@ exports.present = present; exports.only = pickOnlyExistingValues; // for backwards compatibility exports.pickOnlyExistingValues = pickOnlyExistingValues; exports.jsonArrayParam = jsonArrayParam; +exports.download_folder = download_folder; // was exported before, so kept for backwards compatibility exports.DEFAULT_POSTER_OPTIONS = DEFAULT_POSTER_OPTIONS; exports.DEFAULT_VIDEO_SOURCE_TYPES = DEFAULT_VIDEO_SOURCE_TYPES; diff --git a/test/archivespec.js b/test/archivespec.js index dda39a52..8bddea4f 100644 --- a/test/archivespec.js +++ b/test/archivespec.js @@ -187,4 +187,30 @@ describe("archive", function () { }); }); }); + describe('download_folder', function(){ + it('should return url with resource_type image', function(){ + let download_folder_url = utils.download_folder('samples/', {resource_type: 'image'}); + expect(download_folder_url).to.contain('image'); + }); + it('should return valid url', function(){ + let download_folder_url = utils.download_folder('folder/'); + expect(download_folder_url).not.to.be.empty(); + expect(download_folder_url).to.contain('generate_archive'); + }); + + it('should flatten folder', function(){ + let download_folder_url = utils.download_folder('folder/', {flatten_folders: true}); + expect(download_folder_url).to.contain('flatten_folders'); + }); + + it('should expire_at folder', function(){ + let download_folder_url = utils.download_folder('folder/', {expires_at: Date.now() / 1000 + 60}); + expect(download_folder_url).to.contain('expires_at'); + }); + + it('should use original file_name of folder', function(){ + let download_folder_url = utils.download_folder('folder/', {use_original_filename: true}); + expect(download_folder_url).to.contain('use_original_filename'); + }); + }); });