diff --git a/filebrowser_safe/functions.py b/filebrowser_safe/functions.py index 783299a..9e75139 100644 --- a/filebrowser_safe/functions.py +++ b/filebrowser_safe/functions.py @@ -184,6 +184,7 @@ def get_settings_var(): settings_var["SELECT_FORMATS"] = fb_settings.SELECT_FORMATS # FileBrowser Options settings_var["MAX_UPLOAD_SIZE"] = fb_settings.MAX_UPLOAD_SIZE + settings_var["MAX_IMAGE_UPLOAD_SIZE"] = fb_settings.MAX_IMAGE_UPLOAD_SIZE # Convert Filenames settings_var["CONVERT_FILENAME"] = fb_settings.CONVERT_FILENAME return settings_var diff --git a/filebrowser_safe/settings.py b/filebrowser_safe/settings.py index ababcfa..c72d0e8 100644 --- a/filebrowser_safe/settings.py +++ b/filebrowser_safe/settings.py @@ -91,6 +91,9 @@ MAX_UPLOAD_SIZE = getattr( settings, "FILEBROWSER_MAX_UPLOAD_SIZE", settings.FILE_UPLOAD_MAX_MEMORY_SIZE ) +MAX_IMAGE_UPLOAD_SIZE = getattr( + settings, "FILEBROWSER_MAX_IMAGE_UPLOAD_SIZE", MAX_UPLOAD_SIZE +) # Normalize filename and remove all non-alphanumeric characters # except for underscores, spaces & dashes. NORMALIZE_FILENAME = getattr(settings, "FILEBROWSER_NORMALIZE_FILENAME", False) diff --git a/filebrowser_safe/static/filebrowser/js/upload.js b/filebrowser_safe/static/filebrowser/js/upload.js index 6289d63..8d73090 100644 --- a/filebrowser_safe/static/filebrowser/js/upload.js +++ b/filebrowser_safe/static/filebrowser/js/upload.js @@ -16,6 +16,7 @@ var doneRedirect = formData.redirectWhenDone || '/'; var extensions = formData.allowedExtensions && formData.allowedExtensions.split(','); var allowedSize = formData.sizeLimit && parseInt(formData.sizeLimit); + var allowedImageSize = formData.sizeImageLimit && parseInt(formData.sizeImageLimit); form.on('change', 'input[type="file"]', function(e){ var input = this; @@ -24,6 +25,7 @@ var status = resultElement.find('.status'); var hasExtensionError = !validateExtension(selectedFile, extensions); var hasSizeError = !validateSize(selectedFile, allowedSize); + var hasImageSizeError = !validateImageSize(selectedFile, allowedImageSize); resultElement.addClass('selected'); @@ -35,10 +37,12 @@ $(resultElement[0].outerHTML).removeClass('selected').insertAfter(resultElement); // shows the error message if there was an error - if(hasExtensionError || hasSizeError) { - status - .addClass('error') - .text(hasSizeError ? formData.sizeError : formData.extensionError); + if(hasExtensionError) { + status.addClass('error').text(formData.extensionError); + }else if (hasSizeError) { + status.addClass('error').text(formData.sizeError); + }else if (hasImageSizeError) { + status.addClass('error').text(formData.sizeImageError); }else if(selectedFile) { function resume() { // display the selected file's name @@ -88,7 +92,7 @@ element.removeClass('selected').addClass('in-progress'); // when failed, show the error message - promise.fail(function(){ + promise.fail(function(jqXHR, textStatus, errorThrown){ element.find('.status').addClass('error').text(formData.serverError); }); @@ -241,6 +245,20 @@ return true; } + + // checks whether an image's size is under the limit + function validateImageSize(file, allowed){ + if(file && allowed && file.type.startsWith('image')){ + if(typeof allowed === 'number' && !global.isNaN(allowed)){ + return file.size <= allowed; + } + + return false; + } + + return true; + } + // turns the result of jQuery's serializeArray into a proper object function serializeToObject(array){ var output = {}; diff --git a/filebrowser_safe/templates/filebrowser/upload.html b/filebrowser_safe/templates/filebrowser/upload.html index 4b13b5f..eeccee5 100644 --- a/filebrowser_safe/templates/filebrowser/upload.html +++ b/filebrowser_safe/templates/filebrowser/upload.html @@ -41,8 +41,10 @@ data-redirect-when-done="{% url 'fb_browse' %}{% query_string '' 'p' %}" data-allowed-extensions="{% allowed_extensions_list %}" data-size-limit="{{ settings_var.MAX_UPLOAD_SIZE|unlocalize }}" + data-size-image-limit="{{ settings_var.MAX_IMAGE_UPLOAD_SIZE|unlocalize }}" data-server-error="{% trans 'There was a server error when uploading the file.' %}" - data-size-error="{% trans 'The file size is larger than the limit.' %}" + data-size-error="{% trans 'The file size exceeds the limit of' %} {{ settings_var.MAX_UPLOAD_SIZE|filesizeformat }}" + data-size-image-error="{% trans 'The image file size exceeds the limit of' %} {{ settings_var.MAX_IMAGE_UPLOAD_SIZE|filesizeformat }}" data-extension-error="{% trans 'The file extension is not allowed.' %}">
{{ settings_var.MAX_UPLOAD_SIZE|filesizeformat }}
{{ settings_var.MAX_IMAGE_UPLOAD_SIZE|filesizeformat }}
+