未定义上载适配器ckeditor5-angular

时间:2018-08-28 07:38:28

标签: ckeditor angular5 ckeditor5

该问题可能已经答案,但是它们都不是Angular特有的。 这里有一些

我正在使用Angular 5和以下this文档来实现ckeditor5-angular。

但是我在上传图片时遇到问题,当我尝试上传图片时,它会在浏览器控制台中显示。

  

filerepository-no-upload-adapter:未定义上载适配器。了解更多:https://docs.ckeditor.com/ckeditor5/latest/framework/guides/support/error-codes.html#error-filerepository-no-upload-adapter

我尝试搜索此问题,并且能够找到很多解决方案,但是从字面上看,我无法理解其中任何一个,因为它们不是特定于Angular的。

请帮助我如何上传图片。

5 个答案:

答案 0 :(得分:7)

component.html文件中,添加以下代码

<ckeditor [editor]="Editor" (ready)="onReady($event)"></ckeditor>

component.ts文件中创建onReady(data)函数

onReady(eventData) {
    eventData.plugins.get('FileRepository').createUploadAdapter = function (loader) {
      console.log(btoa(loader.file));
      return new UploadAdapter(loader);
    };
  }

然后创建一个名为UploadAdapter的类,并在其中添加以下代码

export class UploadAdapter {
  private loader;
  constructor(loader: any) {
    this.loader = loader;
    console.log(this.readThis(loader.file));
  }

  public upload(): Promise<any> {
    //"data:image/png;base64,"+ btoa(binaryString) 
    return this.readThis(this.loader.file);
  }

  readThis(file: File): Promise<any> {
    console.log(file)
    let imagePromise: Promise<any> = new Promise((resolve, reject) => {
      var myReader: FileReader = new FileReader();
      myReader.onloadend = (e) => {
        let image = myReader.result;
        console.log(image);
        return { default: "data:image/png;base64," + image };
        resolve();
      }
      myReader.readAsDataURL(file);
    });
    return imagePromise;
  }

}

此处default表示上传的图片网址。我已经在base64中转换了文件,但是您可以调用服务器url并上传文件,然后使用相同的键返回服务器url。

EnjOy CodInG:)

答案 1 :(得分:2)

我通过实现自己的 <div class="itemlist"> <span>...</span> <span>...</span> <span>...</span> <span>...</span> <span>...</span> <span>...</span> </div>
解决了这个问题 如果您使用UploadAdapter,将创建一个新的编辑器元素,而不与角度分量相关联

Editor.create()

在component.ts

<ckeditor 
[editor]="Editor" 
[(ngModel)]="content"
(ready)="onReady($event)"
>
</ckeditor>

UploadAdapter.ts

  onReady($event){
    $event.plugins.get('FileRepository').createUploadAdapter = (loader)=> {
      return new UploadAdapter(loader,'',this.http);
    };
  }

答案 2 :(得分:1)

谢谢大家的回答。我为想要查看示例的任何人创建了代码段。但是我使用ckeditor内联构建。希望对您有帮助。

stackblitz

答案 3 :(得分:0)

我用下面的方法似乎有效

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);
            } ) );
   };
}

答案 4 :(得分:-1)

我正在尝试使用zackhalil's solution。该图像显示在编辑器中,但是当我获得更新数据库的值时,我只有:

<figure class="image"><img></figure>

要解决此问题,我更改了以下代码:

return { default: "data:image/png;base64," + image };
resolve();

收件人:

resolve({ default: image });