Skip to content

配置图片&文件上传接口

sunsonliu edited this page Oct 16, 2023 · 7 revisions

用户点击上传图片上传word上传pdf等【工具栏】,或者把文件拖拽到编辑区进行上传,或者在外部ctrl+C复制图片在cherry 编辑区 ctrl+V粘贴图片,都会调用用户定义的上传文件接口进行文件上传操作(如果没有配置该接口,上传图片会以base64格式展示)

第一步需要定义一个上传接口,demo如下:

/**
 * 上传文件函数
 * @param file 上传文件的文件对象
 * @param callback 回调函数,回调函数接收两个参数,第一个参数为文件上传后的url,第二个参数可选,为额外配置信息
 */
function myFileUpload(file, callback) {
    // 先把文件上传到服务端,上传文件的具体代码需要自行实现
    putFile(file, function(err, url) {
        if (err) {
            // 上传失败
        } else {
            callback(url);
        }
    });
}

第二步,将上传文件的函数配置到cherry上,demo如下:

new Cherry({
    id: 'markdown-container', 
    value: '## hello world', 
    fileUpload: myFileUpload,
});

当然,我们还可以有更精细化的控制,比如我们希望上传的视频可以有封面、上传的图片自动带上width=60%的样式,demo如下:

/**
 * 上传文件函数
 * @param file 上传文件的文件对象
 * @param callback 回调函数,回调函数接收两个参数,第一个参数为文件上传后的url,第二个参数可选,为额外配置信息
 */
function myFileUpload(file, callback) {
    // 先把文件上传到服务端,上传文件的具体代码需要自行实现
    putFile(file, function(err, url, file) {
        if (err) {
            // 上传失败
        } else {
            // 如果上传的是视频
            if (/video/i.test(file.type)) {
                callback(url, {
                name: '视频',
                poster: `${url}?poster=true`, // 视频的封面图片url
                isBorder: true, // 是否显示边框,默认false
                isShadow: true, // 是否显示阴影,默认false
                isRadius: true, // 是否显示圆角,默认false
                });
            } else if (/image/i.test(file.type)) {
                // 如果上传的是图片
                callback(url, {
                    name: '图片',
                    isBorder: true, // 是否显示边框,默认false
                    isShadow: true, // 是否显示阴影,默认false
                    isRadius: true, // 是否显示圆角,默认false
                    width: '60%', // 图片的宽度,默认100%,可配置百分比,也可配置像素值
                    height: 'auto', // 图片的高度,默认auto
                });
            } else {
                // 如果上传的是文件
                callback(url);
            }
        }
    });
}

anyway,目前我们已完成了cherry的主要配置,现在用户可以在你的服务上书写Markdown,并且上传图片了。

Clone this wiki locally