CkEditor如何设置图片保存路径

CkEditor可以正常上传图片了

但是我想在输出内容的时候把src中的主机域名都去掉

比如现在的输出是:

<figure class=\"image\"><img src=\"http://localhost:8091/upload-files/download?fileId=c87c411ec37342c6bb5830cea308079b\"></figure>

我希望的是

<figure class=\"image\"><img src=\"/upload-files/download?fileId=c87c411ec37342c6bb5830cea308079b\"></figure>

如何解决?

附图片上传代码:

function renderEditor(idSelector, e) {
    ClassicEditor
        .create(document.querySelector('#' + idSelector), {
            language: 'zh-cn',
            extraPlugins: [fileUploader]
        }).then(nE => {
            e[idSelector] = nE;
        })
        .catch(error => {
            console.error(error);
        });
}

function fileUploader(editor) {
    editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
        return new cusUploadAdapter(loader);
    };
}

class cusUploadAdapter {
    constructor(loader) {
        this.loader = loader;
    }
    upload() {
        return this.loader.file
            .then(file => new Promise((resolve, reject) => {
                this._initRequest();
                this._initListeners(resolve, reject, file);
                this._sendRequest(file);
            }));
    }
    abort() {
        if (this.xhr) {
            this.xhr.abort();
        }
    }
    _initRequest() {
        const xhr = this.xhr = new XMLHttpRequest();
        xhr.open('POST', net.apiPath + '/upload-files/upload', true);
        xhr.responseType = 'json';
        xhr.withCredentials = true;
    }
    _initListeners(resolve, reject, file) {
        const xhr = this.xhr;
        const loader = this.loader;
        const genericErrorText = `上传图片失败: ${file.name}.`;

        xhr.addEventListener('error', () => reject(genericErrorText));
        xhr.addEventListener('abort', () => reject());
        xhr.addEventListener('load', () => {
            const response = xhr.response;
            if (!response || response.error) {
                return reject(response && response.error ? response.error.message : genericErrorText);
            }
            resolve({
                default: net.apiPath + '/upload-files/download?fileId=' + response.bean.fileId
            });
        });
        if (xhr.upload) {
            xhr.upload.addEventListener('progress', evt => {
                if (evt.lengthComputable) {
                    loader.uploadTotal = evt.total;
                    loader.uploaded = evt.loaded;
                }
            });
        }
    }
    _sendRequest(file) {
        const data = new FormData();
        data.append('file', file);
        this.xhr.send(data);
    }
}
阅读 2.2k
1 个回答

function filterPath(str) { // 把src中的主机域名去掉
    return str.replace(/(<img[^<>]+src=\")([^<>]+)("[^<>]*(\/>|>))/gi, (match, s1, s2, s3) => {
        let s2r = s2.replace(/(https:\/\/|http:\/\/)([\w\d\.]+(:\d+)?)(.*)/gi, '$4')
        return s1 + s2r + s3;
    });
}

我只能用暴力替换了。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题