uniCloud服务空间从阿里云搬家迁移至支付宝云

阿里云现在新增了小时级低消,大家的开销一下子涨了不少。今天就给大家讲讲,怎么从阿里云迁移到支付宝云。

就拿咱们之前做的商城项目来举例,迁移之前,大家一定要先检查好:项目能不能正常跑起来,还有所有数据是不是完整没问题。

整个迁移流程,总共 5 步就能搞定:

第1步:从web控制台生成初始化数据

在web控制台选择云数据库->生成初始化数据,选择所有的数据表,设为导出全部数据,右上角选择"生成包含ID"的所有数据,如果你的表比较多的话,他限制全部数据下载最大量是20条,你需要批量下载几次。

注意:

要生成包含ID的记录,因为有可能会存在多个表关联关系,如果你不带原有ID,导入到新的数据库中,就会出现无法关联的情况。

第2步通过AI编辑器清洗数据

将所有压缩包放置到同一个文件夹中,方便让AI帮忙清洗。

一个数据表通常会生成三个文件,后缀分布是:.schema.json(结构)、.init_data.json(数据记录)、.index.json(索引)。

你可以使用免费的AI编辑器,如:字节的Trae、腾讯的CodeBuddy,下面就分步骤说一下清洗的过程。

1.删除schema

schema.json本地已经有了,没必要处理,直接让AI给你删除就行了。

删除文件夹内所有后缀为.schema.json的文件

2.对导出记录的_id处理

如果导出数据的时候,设置的是导出全部记录,导出的_id会放置到一个oid对象中,如下所示:

javascript 复制代码
"_id": {
    "$oid": "692d5d50eef9cb15085972f3"
}

"_id": { "$oid": "692d5d50eef9cb15085972f3"} 找到文件夹内后缀名为.init_data.json的所有文件,将这种格式的去掉对象,只保留oid后面的值

3.压缩初始化库

找到文件夹内后缀名为.init_data.json的所有文件,检查json格式是否正确,压缩为紧凑格式

就是通过上面三个步骤,就可以将导出的数据进行清洗了,如果你的情况不一致,可以继续和AI进行交流修改。

完成之后将清洗好的文件夹内的所有数据,复制到项目的database中。

第3步创建新的支付宝服务空间

创建支付宝云的服务空间,建议选择按量计费方式,这种也不用担心包年包月忘记续费,服务空间被销毁的问题,而且按量计费也比较省钱。

第4步切换服务空间并初始化项目

选择好刚刚创建好的支付宝云服务空间,出现重名的公共模块或者函数,一律选择覆盖即可。

第5步:运行并处理兼容

以上工作做好之后,原来的项目运行在浏览器或者微信小程序,分别测试一下,是否和之前老服务空间看到的有没有差异,一般不会有什么差异。

主要要解决的兼容是云存储问题,因为我们搬家值搬迁了云函数和数据库,云存储历史内容比较少的话,可以通过web控制台或者数据库里有保留文件可以批量下载下来,但是内容多的话显然是下载不现实的,所以不建议迁移云存储,因为计费的上涨主要是云函数的低消造成的,和云存储没太大关系,你就将之前存储的内容放到老的阿里云服务空间就行了,只要保证新上传的图片,上传到新的阿里云服务空间就行了。

兼容处理

1.阿里云和支付宝云内置存储的差异

客户端使用uploadFile将本地上传云存储后,相应参数fileID是有差异的,阿里云返回的fileID是https://网址,是可以直接访问的,而支付宝云返回的fileID是cloud://是无法直接查看的,需要通过getTempFileURL获取到https地址。

因此如果迁移之后,对这一块没有做兼容处理,很容易导致存储进数据库的url地址,在原有的程序逻辑上无法直接使用,所以,我们需要调用uploadFile上传之后将获取的fileID处理一下,如果检测到时支付宝云,那就转成https之后在存入到数据库中。

javascript 复制代码
//将支付宝云返回的cloud地址变成https地址
export const cloudToHttps = (str) => {
	return str.replace('cloud://', 'https://').replace(str.split('/')[2], str.split('/')[2] + '.normal.cloudstatic.cn');
};
javascript 复制代码
//uploadFile上传单张图片并调用cloudToHttps方法将cloud地址变为https地址
export const uploadFileItem = async (url, rootPath = 'public', index = 0) => {
	let tempurl = url;
	let uploadRes = await uniCloud.uploadFile({
		filePath: tempurl,
		cloudPath: rootPath + '/' + dayjs().format('YYYYMMDD') + '/' + Date.now() + '_' + index + '.jpg',
		cloudPathAsRealPath: true
	});
	if (uniCloud.config.provider == 'alipay' && uploadRes?.fileID) uploadRes.fileID = cloudToHttps(uploadRes.fileID);
	return uploadRes;
};

2.浏览器处理跨域

选择上传图片的时候,控制台可能会报"Access to XMLHttpRequest at 'https://u.object.cloudrun.cloudbaseapp.cn/miniapp-prod-env-00jy6aw7au2'from origin 'http://localhost:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.",如下图所示:

这是因为浏览器要求同源出现了跨域问题,那就需要再web控制台跨域配置中,新增本地项目启动的地址localhost:5173和localhost:5174都加进去,再选择上传就不会出问题了。

3.微信小程序配置合法域名

在支付宝云服务空间的总览中,找到上传、下载、request域名,填入到微信小程序后台->开发管理->服务器域名对应的位置进行填入。

总结

以上就是讲阿里云服务空间迁移至支付宝云服务空间,如果在搬迁过程中遇到什么问题,或者有更好的办法,可以在评论区进行交流。

相关推荐
山海鲸实战案例分享11 小时前
山海鲸可视化VS DataV:项目交付之后,谁能持续跟上业务变化
阿里云·数字孪生·数据可视化·零代码·datav·山海鲸可视化
weixin_4935036712 小时前
商会小程序附件上传:分片上传 + OSS 直传完整实现(Vue3 + 阿里云 OSS 实战)
阿里云·小程序·云计算
OpenAnolis小助手1 天前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
qq_350897212 天前
trea实用工具
vue.js·uniapp
9765033352 天前
iOS 上架/审核 4.3a全面解读-最新
flutter·ios·objective-c·uniapp
海鸥两三3 天前
Mac电脑使用 Tabby 部署前端项目到阿里云服务器完整教程
前端·macos·阿里云
上单带刀不带妹3 天前
小程序图片缓存问题:时间戳和版本号解决图片不更新
缓存·小程序·vue·uniapp
爱吃鱼的喵️3 天前
云数据库怎么选?主流云厂商横向对比与选型指南
数据库·阿里云·云计算
边境悍匪3 天前
蜗牛学苑 Java 智能体学习 Day36|阿里云 OSS 文件上传、Spring 事务、全局异常思维导图复盘
java·学习·阿里云