diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php index b9a4ddaf5e7df297d3ad4c5666e35eec4f344a2b..7c8dcb372e24c5d4517b1ac5459e1c03feb9744a 100644 --- a/apps/files/ajax/download.php +++ b/apps/files/ajax/download.php @@ -33,4 +33,10 @@ OCP\User::checkLoggedIn(); $files = $_GET["files"]; $dir = $_GET["dir"]; -OC_Files::get($dir, $files, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); +$files_list = json_decode($files); +// in case we get only a single file +if ($files_list === NULL ) { + $files_list = array($files); +} + +OC_Files::get($dir, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 464f77036857c6ec85982976cf5bfc92a8848f89..a4ef41c280382cdf34925504d416ea0ea39777eb 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -220,14 +220,15 @@ $(document).ready(function() { }); $('.download').click('click',function(event) { - var files=getSelectedFiles('name').join(';'); + var files=getSelectedFiles('name'); + var fileslist = JSON.stringify(files); var dir=$('#dir').val()||'/'; OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.')); // use special download URL if provided, e.g. for public shared files if ( (downloadURL = document.getElementById("downloadURL")) ) { window.location=downloadURL.value+"&download&files="+files; } else { - window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: files }); + window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: fileslist }); } return false; }); diff --git a/lib/files.php b/lib/files.php index b594b78c4b768d7225368859535a76eb07b62ddd..447ffb50577b07298fc034ed48471a590ff8d997 100644 --- a/lib/files.php +++ b/lib/files.php @@ -49,8 +49,9 @@ class OC_Files { isset($_SERVER['MOD_X_ACCEL_REDIRECT_ENABLED'])) { $xsendfile = true; } - if(strpos($files, ';')) { - $files=explode(';', $files); + + if (count($files) == 1) { + $files = $files[0]; } if (is_array($files)) { @@ -77,7 +78,13 @@ class OC_Files { } } $zip->close(); - $name = basename($dir) . '.zip'; + $basename = basename($dir); + if ($basename) { + $name = $basename . '.zip'; + } else { + $name = 'owncloud.zip'; + } + set_time_limit($executionTime); } elseif (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) { self::validateZipDownload($dir, $files);