diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 9750173d11..f9fcfaf13c 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -26,7 +26,7 @@ if (empty($_POST['dirToken'])) { // return only read permissions for public upload $allowedPermissions = OCP\PERMISSION_READ; - $public_directory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/'; + $publicDirectory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/'; $linkItem = OCP\Share::getShareByToken($_POST['dirToken']); if ($linkItem === false) { @@ -50,13 +50,15 @@ if (empty($_POST['dirToken'])) { $dir = sprintf( "/%s/%s", $path, - $public_directory + $publicDirectory ); if (!$dir || empty($dir) || $dir === false) { OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Unable to set upload directory.'))))); die(); } + + $dir = rtrim($dir, '/'); } } @@ -113,33 +115,33 @@ if ($maxUploadFileSize >= 0 and $totalSize > $maxUploadFileSize) { } $result = array(); -$directory = ''; if (strpos($dir, '..') === false) { $fileCount = count($files['name']); for ($i = 0; $i < $fileCount; $i++) { - // Get the files directory - if(isset($_POST['file_directory']) === true) { - $directory = '/'.$_POST['file_directory']; + // target directory for when uploading folders + $relativePath = ''; + if(!empty($_POST['file_directory'])) { + $relativePath = '/'.$_POST['file_directory']; } // $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder if (isset($_POST['resolution']) && $_POST['resolution']==='autorename') { // append a number in brackets like 'filename (2).ext' - $target = OCP\Files::buildNotExistingFileName(stripslashes($dir.$directory), $files['name'][$i]); + $target = OCP\Files::buildNotExistingFileName(stripslashes($dir . $relativePath), $files['name'][$i]); } else { - $target = \OC\Files\Filesystem::normalizePath(stripslashes($dir.$directory).'/'.$files['name'][$i]); + $target = \OC\Files\Filesystem::normalizePath(stripslashes($dir . $relativePath).'/'.$files['name'][$i]); } - - if(empty($directory) === true) - { - $directory = \OC\Files\Filesystem::normalizePath(stripslashes($dir)); - if (isset($public_directory)) { - // If we are uploading from the public app, - // we want to send the relative path in the ajax request. - $directory = $public_directory; - } + + // relative dir to return to the client + if (isset($publicDirectory)) { + // path relative to the public root + $returnedDir = $publicDirectory . $relativePath; + } else { + // full path + $returnedDir = $dir . $relativePath; } + $returnedDir = \OC\Files\Filesystem::normalizePath($returnedDir); if ( ! \OC\Files\Filesystem::file_exists($target) || (isset($_POST['resolution']) && $_POST['resolution']==='replace') @@ -163,7 +165,7 @@ if (strpos($dir, '..') === false) { $data['uploadMaxFilesize'] = $maxUploadFileSize; $data['maxHumanFilesize'] = $maxHumanFileSize; $data['permissions'] = $meta['permissions'] & $allowedPermissions; - $data['directory'] = $directory; + $data['directory'] = $returnedDir; $result[] = $data; } @@ -187,7 +189,7 @@ if (strpos($dir, '..') === false) { $data['uploadMaxFilesize'] = $maxUploadFileSize; $data['maxHumanFilesize'] = $maxHumanFileSize; $data['permissions'] = $meta['permissions'] & $allowedPermissions; - $data['directory'] = $directory; + $data['directory'] = $returnedDir; $result[] = $data; } } diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index 6b0ca79368..da58e1c31b 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -346,7 +346,7 @@ OC.Upload = { // noone set update parameters, we set the minimum data.formData = { requesttoken: oc_requesttoken, - dir: FileList.getCurrentDirectory(), + dir: data.targetDir || FileList.getCurrentDirectory(), file_directory: fileDirectory }; } diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 85c5d3f1bb..cb6c3dcb2c 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1561,17 +1561,12 @@ dir = dropTarget.data('dir') || '/'; } - // update folder in form - data.formData = function() { - return [ - {name: 'dir', value: dir}, - {name: 'requesttoken', value: oc_requesttoken}, - {name: 'file_directory', value: data.files[0].relativePath} - ]; - }; + // add target dir + data.targetDir = dir; } else { // we are dropping somewhere inside the file list, which will // upload the file to the current directory + data.targetDir = self.getCurrentDirectory(); // cancel uploads to current dir if no permission var isCreatable = (self.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0; diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 80631908d2..1d633a655d 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -128,7 +128,7 @@ OCA.Sharing.PublicApp = { data.formData = { requesttoken: $('#publicUploadRequestToken').val(), dirToken: $('#dirToken').val(), - subdir: self.fileList.getCurrentDirectory(), + subdir: data.targetDir || self.fileList.getCurrentDirectory(), file_directory: fileDirectory }; });