Javascript CKEditor 5注册多个上载适配器

Javascript CKEditor 5注册多个上载适配器,javascript,ckeditor,ckeditor5,Javascript,Ckeditor,Ckeditor5,我使用CKEditor 5为我们的软件实现了一个编辑器。我想用这个编辑器上传图像和视频。它有图像插件。我定制了ckfinder上传适配器,将图像上传到我们的服务器。它工作得很好。我上传了图片并成功地在编辑器中显示它们。然后我想把视频文件上传到我们的服务器上。所以我为ckeditor创建了一个视频插件来上传、显示视频。我还创建了另一个上传适配器,将视频上传到我们的服务器。此时,ckeditor filerepository插件只接受一个适配器。导入了两个适配器,但filerepository使用了

我使用CKEditor 5为我们的软件实现了一个编辑器。我想用这个编辑器上传图像和视频。它有图像插件。我定制了ckfinder上传适配器,将图像上传到我们的服务器。它工作得很好。我上传了图片并成功地在编辑器中显示它们。然后我想把视频文件上传到我们的服务器上。所以我为ckeditor创建了一个视频插件来上传、显示视频。我还创建了另一个上传适配器,将视频上传到我们的服务器。此时,ckeditor filerepository插件只接受一个适配器。导入了两个适配器,但filerepository使用了上次导入的适配器。我想使用图像上传适配器上传图像和视频上传适配器上传视频。但我想不出来

使用以下代码初始化图像上载适配器:

init() {
    const url = this.editor.config.get( 'imgUpload.url' );

    if ( !url ) {
        return;
    }

    this.editor.plugins.get( FileRepository ).createUploadAdapter = loader => new ImgUploadAdapter( loader, url, this.editor.t );
}
init() {
    const url = this.editor.config.get( 'videoUpload.url' );

    if ( !url ) {
        return;
    }

    this.editor.plugins.get( FileRepository ).createUploadAdapter = loader => new VideoUploadAdapter( loader, url, this.editor.t );
}
视频上载适配器已使用以下代码初始化:

init() {
    const url = this.editor.config.get( 'imgUpload.url' );

    if ( !url ) {
        return;
    }

    this.editor.plugins.get( FileRepository ).createUploadAdapter = loader => new ImgUploadAdapter( loader, url, this.editor.t );
}
init() {
    const url = this.editor.config.get( 'videoUpload.url' );

    if ( !url ) {
        return;
    }

    this.editor.plugins.get( FileRepository ).createUploadAdapter = loader => new VideoUploadAdapter( loader, url, this.editor.t );
}

如何告诉filerepository分别使用图像上传适配器和视频上传适配器?这可能吗?

加载程序
参数中,您会得到一个实例,该实例在属性中公开本机对象。这意味着在此阶段,您可以通过以下方式访问文件名:

this.editor.plugins.get( FileRepository ).createUploadAdapter = loader => {
    const fileName = loader.file.name;

    if ( fileName.endsWith( '.mov' ) ) {
        return new FileUploadAdapter( ... );
    } else {
        return new GenericUploadAdapter( ... );
    }
};

我运行了我在初始化图像上传适配器时提到的代码行。视频上传适配器的init方法也包含此代码行。但在这里,新的UploadAdapter(…)创建了一个不同于映像上载适配器的类实例。我的意思是,当我将两个适配器插件导入到ckeditor时,每个适配器插件都会创建自己的适配器实例。但是Filerepository使用最后创建的适配器实例。我上传了一个图像文件,视频上传适配器试图上传图像文件。我不想要这个。我可以用一个适配器解决这个问题,这个适配器需要决定如何按文件类型上传文件。但我想分离适配器。每个适配器都应该做自己的工作。我不明白你的意思。你在问题中提到的代码是错误的。如果你想为不同的文件使用不同的上传适配器,那么你需要在
createUploadAdapter()
中处理它。我编辑了这个问题。请看代码片段。当CKEditor初始化插件时,这些init()方法正在运行。当我上传一个文件时,上一个初始化插件的upload()方法正在运行。不是它自己的upload()方法。谢谢您的帮助。您只需要分配一个回调。和我的回答一模一样。您不能修改
editor.plugins.get(FileRepository.createUploadAdapter
两次!这样,将只执行后一个回调。您需要一个插件,它知道两个适配器,并且只分配一个回调。和我的回答一模一样。