Merge pull request #986 from owncloud/fixing-784-master
the maximum upload size is now part of the response of the upload and de...
This commit is contained in:
commit
31cc9aa80d
|
@ -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
|
||||
)));
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
// only need filesystem apps
|
||||
$RUNTIME_APPTYPES = array('filesystem');
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
|
||||
$l=new OC_L10N('files');
|
||||
$maxUploadFilesize = OCP\Util::maxUploadFilesize($dir);
|
||||
$maxHumanFilesize = OCP\Util::humanFileSize($maxUploadFilesize);
|
||||
$maxHumanFilesize = $l->t('Upload') . ' max. ' . $maxHumanFilesize;
|
||||
|
||||
// send back json
|
||||
OCP\JSON::success(array('data' => array('uploadMaxFilesize' => $maxUploadFilesize,
|
||||
'maxHumanFilesize' => $maxHumanFilesize
|
||||
)));
|
|
@ -10,8 +10,17 @@ OCP\JSON::checkLoggedIn();
|
|||
OCP\JSON::callCheck();
|
||||
$l=OC_L10N::get('files');
|
||||
|
||||
// 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' => $l->t( 'No file was uploaded. Unknown error' ))));
|
||||
OCP\JSON::error(array('data' => array( 'message' => $l->t( 'No file was uploaded. Unknown error' ),
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
exit();
|
||||
}
|
||||
|
||||
|
@ -28,7 +37,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();
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +54,9 @@ foreach($files['size'] as $size) {
|
|||
$totalSize+=$size;
|
||||
}
|
||||
if($totalSize>OC_Filesystem::free_space($dir)) {
|
||||
OCP\JSON::error(array('data' => array( 'message' => $l->t( 'Not enough space available' ))));
|
||||
OCP\JSON::error(array('data' => array( 'message' => $l->t( 'Not enough space available' ),
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize)));
|
||||
exit();
|
||||
}
|
||||
|
||||
|
@ -56,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);
|
||||
// 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);
|
||||
|
@ -69,4 +91,7 @@ if(strpos($dir, '..') === false) {
|
|||
$error=$l->t( 'Invalid directory.' );
|
||||
}
|
||||
|
||||
OCP\JSON::error(array('data' => array('message' => $error )));
|
||||
OCP\JSON::error(array('data' => array('message' => $error,
|
||||
'uploadMaxFilesize'=>$maxUploadFilesize,
|
||||
'maxHumanFilesize'=>$maxHumanFilesize
|
||||
)));
|
||||
|
|
|
@ -28,6 +28,7 @@ OCP\User::checkLoggedIn();
|
|||
OCP\Util::addStyle('files', 'files');
|
||||
OCP\Util::addscript('files', 'jquery.iframe-transport');
|
||||
OCP\Util::addscript('files', 'jquery.fileupload');
|
||||
OCP\Util::addscript('files', 'jquery-visibility');
|
||||
OCP\Util::addscript('files', 'files');
|
||||
OCP\Util::addscript('files', 'filelist');
|
||||
OCP\Util::addscript('files', 'fileactions');
|
||||
|
@ -79,13 +80,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);
|
||||
}
|
||||
|
||||
},
|
||||
isFileNameValid:function (name) {
|
||||
if (name === '.') {
|
||||
$('#notification').text(t('files', '\'.\' is an invalid file name.'));
|
||||
|
@ -317,6 +334,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];
|
||||
|
@ -369,6 +387,8 @@ $(document).ready(function() {
|
|||
.success(function(result, textStatus, jqXHR) {
|
||||
var response;
|
||||
response=jQuery.parseJSON(result);
|
||||
Files.updateMaxUploadFilesize(response);
|
||||
|
||||
if(response[0] != undefined && response[0].status == 'success') {
|
||||
var file=response[0];
|
||||
delete uploadingFiles[file.name];
|
||||
|
@ -402,6 +422,7 @@ $(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);
|
||||
Files.updateMaxUploadFilesize(response);
|
||||
if(response[0] != undefined && response[0].status == 'success') {
|
||||
var file=response[0];
|
||||
delete uploadingFiles[file.name];
|
||||
|
@ -712,6 +733,32 @@ $(document).ready(function() {
|
|||
});
|
||||
|
||||
resizeBreadcrumbs(true);
|
||||
|
||||
// file space size sync
|
||||
function update_storage_statistics() {
|
||||
$.getJSON(OC.filePath('files','ajax','getstoragestats.php'),function(response) {
|
||||
Files.updateMaxUploadFilesize(response);
|
||||
});
|
||||
}
|
||||
|
||||
// start on load - we ask the server every 5 minutes
|
||||
var update_storage_statistics_interval = 5*60*1000;
|
||||
var update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval);
|
||||
|
||||
// Use jquery-visibility to de-/re-activate file stats sync
|
||||
if ($.support.pageVisibility) {
|
||||
$(document).on({
|
||||
'show.visibility': function() {
|
||||
if (!update_storage_statistics_interval_id) {
|
||||
update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval);
|
||||
}
|
||||
},
|
||||
'hide.visibility': function() {
|
||||
clearInterval(update_storage_statistics_interval_id);
|
||||
update_storage_statistics_interval_id = 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function scanFiles(force,dir){
|
||||
|
@ -741,6 +788,7 @@ scanFiles.scanning=false;
|
|||
|
||||
function boolOperationFinished(data, callback) {
|
||||
result = jQuery.parseJSON(data.responseText);
|
||||
Files.updateMaxUploadFilesize(result);
|
||||
if(result.status == 'success'){
|
||||
callback.call();
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*! http://mths.be/visibility v1.0.5 by @mathias */
|
||||
(function (window, document, $, undefined) {
|
||||
|
||||
var prefix,
|
||||
property,
|
||||
// In Opera, `'onfocusin' in document == true`, hence the extra `hasFocus` check to detect IE-like behavior
|
||||
eventName = 'onfocusin' in document && 'hasFocus' in document ? 'focusin focusout' : 'focus blur',
|
||||
prefixes = ['', 'moz', 'ms', 'o', 'webkit'],
|
||||
$support = $.support,
|
||||
$event = $.event;
|
||||
|
||||
while ((property = prefix = prefixes.pop()) != undefined) {
|
||||
property = (prefix ? prefix + 'H' : 'h') + 'idden';
|
||||
if ($support.pageVisibility = typeof document[property] == 'boolean') {
|
||||
eventName = prefix + 'visibilitychange';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$(/blur$/.test(eventName) ? window : document).on(eventName, function (event) {
|
||||
var type = event.type,
|
||||
originalEvent = event.originalEvent,
|
||||
toElement = originalEvent.toElement;
|
||||
// If it’s a `{focusin,focusout}` event (IE), `fromElement` and `toElement` should both be `null` or `undefined`;
|
||||
// else, the page visibility hasn’t changed, but the user just clicked somewhere in the doc.
|
||||
// In IE9, we need to check the `relatedTarget` property instead.
|
||||
if (!/^focus./.test(type) || (toElement == undefined && originalEvent.fromElement == undefined && originalEvent.relatedTarget == undefined)) {
|
||||
$event.trigger((property && document[property] || /^(?:blur|focusout)$/.test(type) ? 'hide' : 'show') + '.visibility');
|
||||
}
|
||||
});
|
||||
|
||||
}(this, document, jQuery));
|
|
@ -748,6 +748,23 @@ 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a function is available
|
||||
* @param string $function_name
|
||||
|
|
|
@ -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 New Issue