如何将数据库取出的base64字符串还原为原始JS文件
Base64编码的JS文件内容还原方案
方案1:浏览器端还原/下载JS文件
// 从数据库取出的base64内容 const base64Str = "ZXhwb3J0IGRlZmF1bHQgewpsYWJlbDogIlRlc3QgZmlsZSBKUyIsCiAgdmlld0JveDogIjAgMCA4MDAgMTEyMCIsCiAgbG9jYXRpb25zOiBbCiAgICB7CiAgICAgIGlkOiAiMDEiLAogICAgICBwYXRoOgogICAgICAgICJNIDQ0NS43MyA3NDcuNjcgMjA1LjYgNTMzLjQ0IDU3NC4yMiAxIDc5Ny43MyAxOTUuNjMgNzk5IDIwNC43NCA1MzUuNDkgNDkyLjc0IDU5MS44MiA1ODcuMjIgNDQ1LjczIDc0Ny42NyBaIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICIwMiIsCiAgICAgIHBhdGg6ICJNIDEgODE4LjM4IDIwMy4wOCA1MzAuOSA0NDMuMzkgNzQ5Ljc1IDEwNS4yOSAxMTE5LjM4IDEgODE4LjM4IFoiCiAgICB9CiAgXQp9Ow=="; // 1. 转换为原始JS文本 const jsText = atob(base64Str); // 可直接在控制台打印验证内容和原始文件完全一致 console.log(jsText); // 2. 如需下载为本地JS文件 const blob = new Blob([jsText], { type: 'application/javascript' }); const downloadUrl = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = downloadUrl; a.download = 'mapConfig.js'; // 自定义文件名 a.click(); // 释放占用的内存 URL.revokeObjectURL(downloadUrl);
方案2:Node.js端还原/存储JS文件
const fs = require('fs'); const base64Str = "从数据库读取的base64内容"; // 转换为原始JS文本 const jsText = Buffer.from(base64Str, 'base64').toString('utf8'); // 写入为本地JS文件 fs.writeFileSync('./mapConfig.js', jsText, 'utf8');
方案3:直接读取JS模块中的配置对象(无需生成文件)
如果不需要存储为物理文件,想直接使用JS导出的配置内容,可以用以下方式处理:
注意:仅当你完全信任base64内容来源时使用该方案,执行未知来源的JS代码存在XSS等安全风险
const base64Str = "从数据库读取的base64内容"; const jsText = atob(base64Str); const module = { exports: {} }; // 执行JS代码获取导出的配置 new Function('module', 'exports', jsText)(module, {}); const config = module.exports; // 可直接使用配置内容 console.log(config.locations);
注意事项
- 如果存储的JS内容仅为静态配置,建议上传时直接提取内容转为JSON格式存入数据库,后续解析无需执行代码,安全性和性能更好
- 生产环境如果必须存储和执行动态JS内容,请做好内容签名校验,避免恶意代码被注入执行
内容的提问来源于stack exchange,提问作者Cleiton Freitas
相关产品推荐
相关产品推荐

