Search code examples
phplaravelvue.jsckeditor

best way for managing uploaded files in my editor?


I'm working on a social blog that has an editor built in JavaScript for creating a blog by a user. One of my biggest issues is uploading files and its limitations. Right now for auto-saving user posts, I store images uploaded simultaneously to the server. But the problem is when the user deletes images from the editor because:

  • The number of requests might be too much (even when there are a lot)
  • In Ckeditor I have a procedure for uploading, but there are not for deleting it from server (or at least I don't know how)
  • and finally is that good idea for auto-saving (?)

My editor is a customized version of ckeditor5, and for uploading files, I use an uploadadapter like :

export default class UploadAdapter {
    constructor(loader, article) {
        this.loader = loader;
        this.article = article;
    }
    upload() {
        return new Promise((resolve, reject) => {
            let image = new FormData();
            let url = '/articles/imageUpload';
            image.append('upload', this.loader.file);
            image.append('token', this.article.token);

            axios.post(url, image)
                .then(response => {
                    console.log(response);
                    if (response.data.uploaded) {
                        resolve({
                            default: response.data.url,
                        });
                    }
                    else {
                        reject(response.data.error.message);
                    }
                }).catch(error => {
                console.log(error);
            });
        });
    }
}

Solution

  • I used the below to embed the images as base64 instead of uploading them

    class UploadAdapter {
       constructor( loader ) {
          this.loader = loader;
       }
    
       upload() {
          return this.loader.file
                .then( file => new Promise( ( resolve, reject ) => {
                      var myReader= new FileReader();
                      myReader.onloadend = (e) => {
                         resolve({ default: myReader.result });
                      }
    
                      myReader.readAsDataURL(file);
                } ) );
       };
    }