常见问题
安装
云控制台、微信 IDE 云开发控制台找不到内容管理?
不同于原开源版 CMS 以及 CMS 云模板,内容管理 属于云后台的内置系统要开通云后台后进行使用。
进入 内容管理
功能
云数据库与内容管理与什么区别和联系?
区别
定位与功能:
- 云数据库:专注于数据的结构、关系及其操作。它提供了一系列数据库操作功能,如增删改查,并支持高级查询与校验。这类应用主要用于数据的维护与管理,确保数据的完整性与一致性。
- 内容管理:聚焦于内容的展示与编辑。其直观的可视化界面让非技术人员也能便捷地进行内容管理。它适用于多种类型内容的管理,如文本、图片、文件等,并支持富文本及 Markdown 格式的编辑。
使用场景:
- 云数据库:适合那些需要精细控制数据结构与关系的场景,如企业级应用、数据分析以及复杂的数据操作等。
- 内容管理:适用于需要迅速搭建内容展示与编辑平台的场合,例如新闻网站、博客、电商平台等。
联系
- 数据共享:无论是云数据库还是内容管理,都可以访问并操作云开发数据库中的数据。内容管理应用中的内容数据可通过云开发的各端 SDK 进行访问与操作。
- 集成能力:内容管理能够与云开发的生态系统紧密集成,支持与云函数、触发器、API 等其他云开发组件的整合,从而实现更为丰富的业务逻辑。
- 用户体验:内容管理通过直观的可视化编辑界面降低了内容管理的难度,提升了运营效率;而云数据库则凭借强大的数据操作能力确保了数据的准确性与时效性。
简而言之,云数据库主要服务于开发者,侧重于数据模型的精细化管理;而内容管理应用则更多地面向运营人员,注重内容的快速编辑和使用。内容管理是基于一定的数据模型构建的,两者在功能和目标上虽有差异,却也存在紧密的联系与互补性。
如何转换 cloud:// 为 https 链接
文件字段、图片字段、多媒体字段在处理用户上传的资源时,以及 富文本、Markdown 等字段中上传的图片信息,为了安全起见,会将图片存储为 cloud://
这种云文件 ID 的形式,在使用时可能需要进行转换(小程序的 image
组件等本身支持云文件 ID 的)。
如果需要转换 cloud:// 为 https 链接,可参考以下两个方法:
方法 1: 不更改云存储权限,调用 sdk 实现
使用 sdk 调用 getTempFileURL 方法获取云存储文件的临时访问链,即将 loud://xxxx 协议的私有地址转换为 http 协议的正常地址。可参考以下方法实现。
注意:cloud://xxx 协议地址错误或者无访问权限等,该方法将不会返回地址,不要随意变更云存储默认权限。
- Web
- 微信小程序
- Node.js
//第一步,引入 Web SDK,
import tcb from '@cloudbase/js-sdk';
//第二步,初始化
const app = tcb.init({
env: 'your-env-id',
});
//第三步,登录认证,下面非完整代码,需选择登录方式,具体可以参考「快速开始」-「登录与用户案例」
const auth = app.auth({
persistence: 'local', //用户显式退出或更改密码之前的30天一直有效
});
const transformImgUrl = async (fileList) => {
const res = await app.getTempFileURL({
fileList,
});
const urlList = res.fileList?.map((i) => i.tempFileURL);
// 返回fileList 是一个有如下结构的对象数组
// [{
// fileID: 'cloud://webtestjimmy-5328c3.7765-webtestjimmy-5328c3-1251059088/腾讯云.png', // 文件 ID
// tempFileURL: '', // 临时文件网络链接
// maxAge: 120 * 60 * 1000, // 有效期
// }]
return urlList;
};
const urlList = transformImgUrl(['cloud://a/b/c', 'cloud://d/e/f']);
console.log(urlList);
// ['https://a/b/c', 'https://d/e/f']
//需先使用 wx.cloud.init 初始化,小程序端无需再引入 SDK ,且免鉴权
const transformImgUrl = async (fileList) => {
const res = await wx.cloud.getTempFileURL({
fileList,
});
const urlList = res.fileList?.map((i) => i.tempFileURL);
// 返回fileList 是一个有如下结构的对象数组
// [{
// fileID: 'cloud://webtestjimmy-5328c3.7765-webtestjimmy-5328c3-1251059088/腾讯云.png', // 文件 ID
// tempFileURL: '', // 临时文件网络链接
// maxAge: 120 * 60 * 1000, // 有效期
// }]
return urlList;
};
const urlList = transformImgUrl(['cloud://a/b/c', 'cloud://d/e/f']);
console.log(urlList);
// ['https://a/b/c', 'https://d/e/f']
const tcb = require('@cloudbase/node-sdk');
const app = tcb.init();
const transformImgUrl = async (fileList) => {
const res = await app.getTempFileURL({
fileList,
});
const urlList = res.fileList?.map((i) => i.tempFileURL);
// 返回fileList 是一个有如下结构的对象数组
// [{
// fileID: 'cloud://webtestjimmy-5328c3.7765-webtestjimmy-5328c3-1251059088/腾讯云.png', // 文件 ID
// tempFileURL: '', // 临时文件网络链接
// maxAge: 120 * 60 * 1000, // 有效期
// }]
return urlList;
};
const urlList = transformImgUrl(['cloud://a/b/c', 'cloud://d/e/f']);
console.log(urlList);
// ['https://a/b/c', 'https://d/e/f']
方法 2: 设置云存储权限为所有人可读,通过正则转换文件地址
注意:cloud://xxx 协议地址错误或者无访问权限等,该方法转换的地址不可访问。云存储权限设置为所有人可读,存在一定风险,修改权限需谨慎。
const transformImgUrl = (value) => {
const regex = /^(cloud):\/\/([0-9\-A-Za-z]+)?\.([0-9\-A-Za-z]+)\/(.*)/;
let matched = value.match(regex);
if (matched) {
const [_, protocol, envid, origin, path] = matched;
return protocol === 'cloud'
? `https://${origin}.tcb.qcloud.la/${path}`
: '';
}
};
富文本内容转换
对于包含图片的富文本内容做转换,可参考以下方案:
内容管理中上传图片存储的图片地址为 cloud 协议地址。如需要自定义处理图片展示,可参考以下方法实现。
- 定义 transformValue 方法,通过正则匹配到需要转换包含图片内容,对图片地址做转换
export const transformValue = async (value, transformImgUrl) => {
// 匹配img的正则表达式
const regex = new RegExp(/<img [^>]*src=\\*"([^"]*?)\\*"/g);
// 通过正则获取到图片地址是cloud协议的img
const imgList = value?.match(regex) || [];
let imgUrl = imgList
.map((i) => i.replace(regex, '$1'))
.filter((j) => j.includes('cloud://'));
if (imgUrl.length) {
// 转换图片链接
imgUrl = await transformImgUrl(imgUrl);
}
let tempValue = value;
if (imgList && imgList.length > 0) {
// 将得到的http地址设置到图片的src,以便展示
imgList.forEach((img, index) => {
const url = img.replace(regex, '$1');
if (imgList[index]) {
tempValue = tempValue.replace(new RegExp(url, 'g'), imgUrl[index]);
}
});
}
return tempValue;
};
- 调用 transformValue 事件即可获取转换后的富文本值
费用
内容管理应用开通不单独收费,属于云后台默认系统应用。当您开通云开发环境后即可进入云后台使用内容管理,您只需要为您使用的云资源付费,您可以在 费用中心 查看具体信息。