Ray 保存图片到相册
Posted: 2026年 Mar 4日 14:09
我的项目到了优化阶段, 有个界面用到的动画比较多(rjs实现的),有点卡顿.看到前面有优化的文章,最终的手段主要就是改成gif(交互方式我没得权动, 客户已经规定死了).
但是我不知道怎么把截图(base64字符串)保存到相册中,有没有相关的接口?
谢谢!
我的项目到了优化阶段, 有个界面用到的动画比较多(rjs实现的),有点卡顿.看到前面有优化的文章,最终的手段主要就是改成gif(交互方式我没得权动, 客户已经规定死了).
但是我不知道怎么把截图(base64字符串)保存到相册中,有没有相关的接口?
谢谢!
参考demo:
https://github.com/Tuya-Community/tuya- ... /index.tsx
Code: Select all
import {
getFileSystemManager,
saveImageToPhotosAlbum,
env,
showToast,
authorize
} from '@ray-js/ray';
// 假设 base64String 是你获取到的截图数据
const saveScreenshot = async (base64String: string) => {
const fs = getFileSystemManager();
// 1. 定义临时存储路径 (建议加上时间戳防止覆盖)
const filePath = `${env.USER_DATA_PATH}/screenshot_${Date.now()}.png`;
// 去除 base64 头部(如果是 data:image/png;base64, 格式)
const cleanData = base64String.replace(/^data:image\/\w+;base64,/, '');
try {
// 2. 检查并请求相册权限
await new Promise((resolve, reject) => {
authorize({
scope: 'scope.writePhotosAlbum',
success: resolve,
fail: reject,
});
});
// 3. 将 Base64 写入文件
await new Promise((resolve, reject) => {
fs.writeFile({
filePath,
data: cleanData,
encoding: 'base64',
success: resolve,
fail: reject,
});
});
// 4. 保存文件到相册
saveImageToPhotosAlbum({
filePath,
success: () => {
showToast({ title: '保存相册成功', icon: 'success' });
// 可选:保存成功后删除临时文件释放空间
fs.unlink({ filePath });
},
fail: (err) => {
console.error('保存相册失败', err);
showToast({ title: '保存相册失败', icon: 'error' });
}
});
} catch (error) {
console.error('处理流程出错', error);
showToast({ title: '授权或写入失败', icon: 'error' });
}
};