mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
the maximum upload size is now part of the response of the upload and delete operation.
the maximum upload size is updated within the browser once an upload or delete operation has been finished
This commit is contained in:
parent
bdc8d0098a
commit
39d874cd90
6 changed files with 98 additions and 17 deletions
|
|
@ -21,8 +21,20 @@ foreach($files as $file) {
|
|||
}
|
||||
}
|
||||
|
||||
// updated max file size after upload
|
||||
$l=new OC_L10N('files');
|
||||
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
|
||||
$maxHumanFilesize=OCP\Util::humanFileSize($maxUploadFilesize);
|
||||
$maxHumanFilesize=$l->t('Upload') . ' max. '.$maxHumanFilesize;
|
||||
|
||||
if($success) {
|
||||
OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $files )));
|
||||
OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $files,
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
} else {
|
||||
OCP\JSON::error(array("data" => array( "message" => "Could not delete:\n" . $filesWithError )));
|
||||
OCP\JSON::error(array("data" => array( "message" => "Could not delete:\n" . $filesWithError,
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,8 +9,17 @@ OCP\JSON::setContentTypeHeader('text/plain');
|
|||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
// current max upload size
|
||||
$l=new OC_L10N('files');
|
||||
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
|
||||
$maxHumanFilesize=OCP\Util::humanFileSize($maxUploadFilesize);
|
||||
$maxHumanFilesize=$l->t('Upload') . ' max. '.$maxHumanFilesize;
|
||||
|
||||
if (!isset($_FILES['files'])) {
|
||||
OCP\JSON::error(array('data' => array( 'message' => 'No file was uploaded. Unknown error' )));
|
||||
OCP\JSON::error(array('data' => array( 'message' => 'No file was uploaded. Unknown error',
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
exit();
|
||||
}
|
||||
foreach ($_FILES['files']['error'] as $error) {
|
||||
|
|
@ -27,7 +36,10 @@ foreach ($_FILES['files']['error'] as $error) {
|
|||
UPLOAD_ERR_NO_TMP_DIR=>$l->t('Missing a temporary folder'),
|
||||
UPLOAD_ERR_CANT_WRITE=>$l->t('Failed to write to disk'),
|
||||
);
|
||||
OCP\JSON::error(array('data' => array( 'message' => $errors[$error] )));
|
||||
OCP\JSON::error(array('data' => array( 'message' => $errors[$error],
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
|
@ -41,7 +53,10 @@ foreach($files['size'] as $size) {
|
|||
$totalSize+=$size;
|
||||
}
|
||||
if($totalSize>OC_Filesystem::free_space($dir)) {
|
||||
OCP\JSON::error(array('data' => array( 'message' => 'Not enough space available' )));
|
||||
OCP\JSON::error(array('data' => array( 'message' => 'Not enough space available',
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
exit();
|
||||
}
|
||||
|
||||
|
|
@ -55,11 +70,19 @@ if(strpos($dir, '..') === false) {
|
|||
if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
|
||||
$meta = OC_FileCache::get($target);
|
||||
$id = OC_FileCache::getId($target);
|
||||
$result[]=array( 'status' => 'success',
|
||||
// updated max file size after upload
|
||||
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
|
||||
$maxHumanFilesize=OCP\Util::humanFileSize($maxUploadFilesize);
|
||||
$maxHumanFilesize=$l->t('Upload') . ' max. '.$maxHumanFilesize;
|
||||
|
||||
$result[]=array( 'status' => 'success',
|
||||
'mime'=>$meta['mimetype'],
|
||||
'size'=>$meta['size'],
|
||||
'id'=>$id,
|
||||
'name'=>basename($target));
|
||||
'name'=>basename($target),
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
);
|
||||
}
|
||||
}
|
||||
OCP\JSON::encodedPrint($result);
|
||||
|
|
@ -68,4 +91,7 @@ if(strpos($dir, '..') === false) {
|
|||
$error='invalid dir';
|
||||
}
|
||||
|
||||
OCP\JSON::error(array('data' => array('error' => $error, 'file' => $fileName)));
|
||||
OCP\JSON::error(array('data' => array('error' => $error, 'file' => $fileName,
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
|
|
|
|||
|
|
@ -79,13 +79,7 @@ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
|
|||
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
|
||||
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false);
|
||||
|
||||
$upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
|
||||
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
|
||||
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
|
||||
|
||||
$freeSpace = OC_Filesystem::free_space($dir);
|
||||
$freeSpace = max($freeSpace, 0);
|
||||
$maxUploadFilesize = min($maxUploadFilesize, $freeSpace);
|
||||
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
|
||||
|
||||
$permissions = OCP\PERMISSION_READ;
|
||||
if (OC_Filesystem::isUpdatable($dir . '/')) {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,23 @@ Files={
|
|||
});
|
||||
procesSelection();
|
||||
},
|
||||
updateMaxUploadFilesize:function(response) {
|
||||
if(response == undefined) {
|
||||
return;
|
||||
}
|
||||
if(response.data !== undefined && response.data.uploadMaxFilesize !== undefined) {
|
||||
$('#max_upload').val(response.data.uploadMaxFilesize);
|
||||
$('#data-upload-form a').attr('original-title', response.data.maxHumanFilesize);
|
||||
}
|
||||
if(response[0] == undefined) {
|
||||
return;
|
||||
}
|
||||
if(response[0].uploadMaxFilesize !== undefined) {
|
||||
$('#max_upload').val(response[0].uploadMaxFilesize);
|
||||
$('#data-upload-form a').attr('original-title', response[0].maxHumanFilesize);
|
||||
}
|
||||
|
||||
},
|
||||
containsInvalidCharacters:function (name) {
|
||||
var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*'];
|
||||
for (var i = 0; i < invalid_characters.length; i++) {
|
||||
|
|
@ -304,6 +321,7 @@ $(document).ready(function() {
|
|||
$('#notification').text(t('files', response.data.message));
|
||||
$('#notification').fadeIn();
|
||||
}
|
||||
Files.updateMaxUploadFilesize(response);
|
||||
var file=response[0];
|
||||
// TODO: this doesn't work if the file name has been changed server side
|
||||
delete uploadingFiles[dirName][file.name];
|
||||
|
|
@ -354,7 +372,9 @@ $(document).ready(function() {
|
|||
.success(function(result, textStatus, jqXHR) {
|
||||
var response;
|
||||
response=jQuery.parseJSON(result);
|
||||
if(response[0] != undefined && response[0].status == 'success') {
|
||||
Files.updateMaxUploadFilesize(response);
|
||||
|
||||
if(response[0] != undefined && response[0].status == 'success') {
|
||||
var file=response[0];
|
||||
delete uploadingFiles[file.name];
|
||||
$('tr').filterAttr('data-file',file.name).data('mime',file.mime).data('id',file.id);
|
||||
|
|
@ -384,7 +404,8 @@ $(document).ready(function() {
|
|||
data.submit().success(function(data, status) {
|
||||
// in safari data is a string
|
||||
response = jQuery.parseJSON(typeof data === 'string' ? data : data[0].body.innerText);
|
||||
if(response[0] != undefined && response[0].status == 'success') {
|
||||
Files.updateMaxUploadFilesize(response);
|
||||
if(response[0] != undefined && response[0].status == 'success') {
|
||||
var file=response[0];
|
||||
delete uploadingFiles[file.name];
|
||||
$('tr').filterAttr('data-file',file.name).data('mime',file.mime).data('id',file.id);
|
||||
|
|
@ -712,6 +733,7 @@ scanFiles.scanning=false;
|
|||
|
||||
function boolOperationFinished(data, callback) {
|
||||
result = jQuery.parseJSON(data.responseText);
|
||||
Files.updateMaxUploadFilesize(result);
|
||||
if(result.status == 'success'){
|
||||
callback.call();
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -758,4 +758,21 @@ class OC_Helper {
|
|||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief calculates the maximum upload size respecting system settings, free space and user quota
|
||||
*
|
||||
* @param $dir the current folder where the user currently operates
|
||||
* @return number of bytes representing
|
||||
*/
|
||||
public static function maxUploadFilesize($dir) {
|
||||
$upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
|
||||
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
|
||||
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
|
||||
|
||||
$freeSpace = OC_Filesystem::free_space($dir);
|
||||
$freeSpace = max($freeSpace, 0);
|
||||
|
||||
return min($maxUploadFilesize, $freeSpace);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -367,4 +367,14 @@ class Util {
|
|||
public static function recursiveArraySearch($haystack, $needle, $index = null) {
|
||||
return(\OC_Helper::recursiveArraySearch($haystack, $needle, $index));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief calculates the maximum upload size respecting system settings, free space and user quota
|
||||
*
|
||||
* @param $dir the current folder where the user currently operates
|
||||
* @return number of bytes representing
|
||||
*/
|
||||
public static function maxUploadFilesize($dir) {
|
||||
return \OC_Helper::maxUploadFilesize($dir);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue