评论

关于云开发editor组件调用,在Skyline模式下应用

editor组件在Skyline模式下应用,编辑器内本地图片上传与替换。

关于editor封装组件参考:微信小程序开发之富文本编辑器 https://developers.weixin.qq.com/community/develop/article/doc/00066ce63e4de8f7793c0f08a51c13

editor组件在Skyline模式下如何应用?

小程序已经运行在Skyline模式,对于webview模式下的editor不兼容,处理办法:在引用editor页面的json配置里:

"renderer": "webview"


编辑器图片上传与处理

关于编辑器内上传的图片,在提交保存之前,可能对编辑器内的图片进行撤销,删除等操作。部分同学是在点击添加图片的时候,就上传返回一个url链接,者导致删除或者撤销编辑器时,服务器存在图片原文件未被删除。

官方文档

我是通过云开发提交给云函数进行处理,代码如下就能实现批量上传,替换编辑器里的html中包含的图片临时文件路径

// 云函数入口文件
const cloud = require('wx-server-sdk');
cloud.init();
const db = cloud.database();

// 云函数名称
exports.main = async (event, context) => {
  try {
    // 获取富文本内容
    const content = event.content;

    // 定义一个函数用于上传图片并替换地址
    const processImages = async (content) => {
      // 正则表达式匹配图片
      const imgRegex = /]+src="([^">]+)"/g;
      let match;
      let newContent = content;

      while ((match = imgRegex.exec(content)) !== null) {
        const localImgUrl = match[1];
        // 上传图片到云存储
        const res = await cloud.uploadFile({
          cloudPath: `images/${Date.now()}-${Math.floor(Math.random() * 1000)}.jpg`,
          fileContent: Buffer.from(localImgUrl.split(',')[1], 'base64'), // 假设localImgUrl是base64编码
        });
        const cloudImgUrl = res.fileID;
      // 替换图片地址
      newContent = newContent.replace(match[0], `<img src="${cloudImgUrl}"`);
      }

      return newContent;
    };

    // 处理富文本内容中的图片
    const processedContent = await processImages(content);

    // 保存处理后的内容到数据库
    await db.collection('posts').add({
      data: {
        content: processedContent,
        createTime: db.serverDate(),
      },
    });

    return { success: true };
  } catch (err) {
    console.error(err);
    return { success: false, error: err };
  }
};


以上作为editor引用在Skyline模式分享,如果对你有帮助,可以收藏。


最后一次编辑于  10-15  
点赞 0
收藏
评论
登录 后发表内容