Simple upload adapter
The simple upload adapter lets you upload images to your server using the XMLHttpRequest
API with a minimal editor configuration. See the Server-side configuration section to learn about the requirements for your server-side application.
# Installation
⚠️ New import paths
Starting with version 42.0.0, we changed the format of import paths. This guide uses the new, shorter format. Refer to the Packages in the legacy setup guide if you use an older version of CKEditor 5.
After installing the editor, add the feature to your plugin list and toolbar configuration:
import { ClassicEditor, SimpleUploadAdapter } from 'ckeditor5';
ClassicEditor
.create( document.querySelector( '#editor' ), {
licenseKey: '<YOUR_LICENSE_KEY>', // Or 'GPL'.
plugins: [ SimpleUploadAdapter, /* ... */ ],
toolbar: [ /* ... */ ],
simpleUpload: {
// Configuration.
}
} )
.then( /* ... */ )
.catch( /* ... */ );
# Configuration
The client side of this feature is configurable using the config.simpleUpload
object.
ClassicEditor
.create( document.querySelector( '#editor' ), {
// ... Other configuration options ...
simpleUpload: {
// The URL that the images are uploaded to.
uploadUrl: 'http://example.com',
// Enable the XMLHttpRequest.withCredentials property.
withCredentials: true,
// Headers sent along with the XMLHttpRequest to the upload server.
headers: {
'X-CSRF-TOKEN': 'CSRF-Token',
Authorization: 'Bearer <JSON Web Token>'
}
}
} )
.then( /* ... */ )
.catch( /* ... */ );
# Configuring allowed file types
The allowed file types that can be uploaded should be configured in two places:
- On the client side, in CKEditor 5, restricting image upload through the CKEditor 5 UI and commands.
- On the server side, in your server-side application configuration.
# Client-side configuration
Use the image.upload.types
configuration option to define the allowed image MIME types that can be uploaded to CKEditor 5.
By default, users are allowed to upload jpeg
, png
, gif
, bmp
, webp
, and tiff
files, but you can customize this behavior to accept, for example, SVG files.
# Server-side configuration
It is up to you to implement any filtering mechanisms on your server to restrict the types of images that are allowed to be uploaded.
# Server-side configuration
To use this upload adapter, you must provide a server-side application that will handle the uploads and communicate with the editor, as described in the following sections.
# Communication protocol
When the image upload process is initiated, the adapter sends a POST
request under config.simpleUpload.uploadUrl
.
You can send additional headers along with the XMLHttpRequest
to the upload server, for example, to authenticate the user, using the config.simpleUpload.headers
object.
If you use the config.simpleUpload.withCredentials
configuration, you may need some extra HTTP headers for the cross-site request to work.
The responseType
of the request is always json
. See the Successful upload and Error handling sections to learn more.
# Successful upload
If the upload is successful, the server should return:
-
An object containing the
url
property which points to the uploaded image on the server:{ "url": "https://example.com/images/foo.jpg" }
-
Or an object with the
urls
property, if you want to use responsive images and the server supports it:{ "urls": { "default": "https://example.com/images/foo.jpg", "800": "https://example.com/images/foo-800.jpg", "1024": "https://example.com/images/foo-1024.jpg", "1920": "https://example.com/images/foo-1920.jpg" } }
The
"default"
URL will be used in thesrc
attribute of the image in the rich-text editor content. Other URLs will be used in thesrcset
attribute, allowing the web browser to select the best one for the geometry of the viewport.
The URL(s) in the server response are used:
- To display the image during the editing (as seen by the user in the editor).
- In the editor content saved to the database.
# Error handling
If something went wrong, the server must return an object that contains the error
property. This will cancel the upload in the editor, for example, allowing the user to select another image if the previous one was too big or did not meet some other validation criteria.
If the error
object contains a message
, it will be passed to the editor notification system and displayed to the user. For the convenience of the users, use clear and possibly specific error messages.
{
"error": {
"message": "The image upload failed because the image was too big (max 1.5MB)."
}
}
If the message
property is missing in the error
object, the editor notification system will display the default “Could not upload file: [filename]
.” message.
# Upload progress
This upload adapter will notify users about the file upload progress out–of–the–box.
# What’s next
Check out the comprehensive Image upload overview to learn more about different ways of uploading images in CKEditor 5.
See the Image feature guide to find out more about handling images in CKEditor 5 WYSIWYG editor.
# Contribute
The source code of the feature is available on GitHub at https://github.com/ckeditor/ckeditor5/tree/master/packages/ckeditor5-upload.
Every day, we work hard to keep our documentation complete. Have you spotted outdated information? Is something missing? Please report it via our issue tracker.
With the release of version 42.0.0, we have rewritten much of our documentation to reflect the new import paths and features. We appreciate your feedback to help us ensure its accuracy and completeness.