Days
Hours
Minutes
Seconds
x

Froala Editor v4.1.4 is Here LEARN MORE

Skip to content

Python File Validation

How it works

  1. The file gets uploaded to your server.
  2. Before storing the file on disk, it is being validated on server side.

Jump to Complete Example

File Upload

In the Server Upload article we explain the steps to upload an file on your server. When you insert an file in the rich text editor, you can validate its format. However that check is done only on the filename and not on the mime type. We recommend to make additional checks on server side just to make sure that users don't upload files in bad formats.

Validate Extension

The WYSIWYG editor's Python SDK comes with the possibility to check the file extension when it is being stored on the disk. Additional to the file name extension, it is using the mime type of the file for better accuracy.

options = {
  'validation': {
    'allowedExts': ['txt'],
    'allowedMimeTypes': ['text/plain']
  }
}

response = File.upload(CustomAdapter(request), '/public/', options)

Custom Validation

You can also pass a custom method instead of validating the extension and mime type. This gives you full control on what types of files you want to store on disk. Below is an example of how to validate if a file is smaller than 10Mb.

def validation(filePath, mimetype):
  size = os.path.getsize(filePath)
    if size > 10 * 1024 * 1024:
      return False
    return True

options = {
  'validation': validation
}
response = File.upload(CustomAdapter(request), '/public/', options)

Complete Example

<script>
  new FroalaEditor('.selector', {
    // Set the file upload URL.
    fileUploadURL: '/upload_file_upload',

    fileUploadParams: {
      id: 'my_editor'
    }
  })
</script>
# Django
from django.http import HttpResponse
import json
from froala_editor import File
from froala_editor import DjangoAdapter

def upload_file_validation(request):
  options = {
    'validation': {
      'allowedExts': ['txt'],
      'allowedMimeTypes': ['text/plain']
    }
  }

  try:
    response = File.upload(DjangoAdapter(request), '/public/', options)
  except Exception:
    response = {'error': str(sys.exc_info()[1])}
  return HttpResponse(json.dumps(response), content_type="application/json")
# Flask
from flask import request
import json
from froala_editor import File
from froala_editor import FlaskAdapter

@app.route('/upload_file_validation', methods=['POST'])
def upload_file_validation():
  options = {
    'validation': {
      'allowedExts': ['txt'],
      'allowedMimeTypes': ['text/plain']
    }
  }

  try:
    response = File.upload(FlaskAdapter(request), '/public/', options)
  except Exception:
    response = {'error': str(sys.exc_info()[1])}
  return json.dumps(response)
# Pyramid
from pyramid.response import Response
import json
from froala_editor import File
from froala_editor import PyramidAdapter

def upload_file_validation(request):
  options = {
    'validation': {
      'allowedExts': ['txt'],
      'allowedMimeTypes': ['text/plain']
    }
  }

  try:
    response = File.upload(PyramidAdapter(request), '/public/', options)
  except Exception:
    response = {'error': str(sys.exc_info()[1])}
  return Response(json.dumps(response))

Do you think we can improve this article? Let us know.

[class^="wpforms-"]
[class^="wpforms-"]
[bws_google_captcha]
<div class="gglcptch gglcptch_v2"><div id="gglcptch_recaptcha_85372297" class="gglcptch_recaptcha"></div> <noscript> <div style="width: 302px;"> <div style="width: 302px; height: 422px; position: relative;"> <div style="width: 302px; height: 422px; position: absolute;"> <iframe src="https://www.google.com/recaptcha/api/fallback?k=6Ld6lNoUAAAAAM626LfCOrnkBFJtYZAKESFCjgv_" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe> </div> </div> <div style="border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px; height: 60px; width: 300px;"> <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px !important; height: 40px !important; border: 1px solid #c1c1c1 !important; margin: 10px 25px !important; padding: 0px !important; resize: none !important;"></textarea> </div> </div> </noscript></div>
[class^="wpforms-"]
[class^="wpforms-"]
[bws_google_captcha]
<div class="gglcptch gglcptch_v2"><div id="gglcptch_recaptcha_2052062298" class="gglcptch_recaptcha"></div> <noscript> <div style="width: 302px;"> <div style="width: 302px; height: 422px; position: relative;"> <div style="width: 302px; height: 422px; position: absolute;"> <iframe src="https://www.google.com/recaptcha/api/fallback?k=6Ld6lNoUAAAAAM626LfCOrnkBFJtYZAKESFCjgv_" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe> </div> </div> <div style="border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px; height: 60px; width: 300px;"> <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px !important; height: 40px !important; border: 1px solid #c1c1c1 !important; margin: 10px 25px !important; padding: 0px !important; resize: none !important;"></textarea> </div> </div> </noscript></div>
[class^="wpforms-"]
[class^="wpforms-"]
[bws_google_captcha]
<div class="gglcptch gglcptch_v2"><div id="gglcptch_recaptcha_1366887239" class="gglcptch_recaptcha"></div> <noscript> <div style="width: 302px;"> <div style="width: 302px; height: 422px; position: relative;"> <div style="width: 302px; height: 422px; position: absolute;"> <iframe src="https://www.google.com/recaptcha/api/fallback?k=6Ld6lNoUAAAAAM626LfCOrnkBFJtYZAKESFCjgv_" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe> </div> </div> <div style="border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px; height: 60px; width: 300px;"> <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px !important; height: 40px !important; border: 1px solid #c1c1c1 !important; margin: 10px 25px !important; padding: 0px !important; resize: none !important;"></textarea> </div> </div> </noscript></div>