如何解决分割DataURI后无法解码为图片的问题?
问题解决:DataURI解码为图片失败的修复方案
你的代码存在几个关键问题,导致无法正常解码DataURI并生成图片,以下是修复后的代码和问题说明:
核心问题分析
split("data:image/png;base64,")返回的是数组,直接将数组传给Utilities.newBlob()会导致错误,应该取数组的第二个元素(索引为1的部分,即纯base64编码内容)- 代码中存在变量名错误:
dataurl = Utilities.base64Decode(dataurl);这里dataurl未定义就被使用,属于逻辑错误 - 生成Blob的流程错误:需要先解码base64字符串,再创建Blob,不能直接用原始分割结果操作
修复后的完整代码
function Image_Build() { var data_sheet = SpreadsheetApp.openById('10DY3Qlw6EwC_NnxSxoU-0H88PYKv83rOaRImn4yubDc').getSheetByName('表單回應 1'); var data_row = data_sheet.getLastRow(); var data_col = data_sheet.getLastColumn(); var range = data_sheet.getRange(1, 1, data_row, data_col); var values = range.getValues(); var datauri = values[1][16]; // 分割DataURI,提取纯base64编码部分 var base64Str = datauri.split("data:image/png;base64,")[1]; if (!base64Str) { console.log("无效的DataURI格式"); return; } // 解码base64并创建图片Blob var decodedBytes = Utilities.base64Decode(base64Str); var imgBlob = Utilities.newBlob(decodedBytes, 'image/png', 'test.png'); // 保存到指定Drive文件夹 var folder = DriveApp.getFolderById("1yECMj1EvBQhV1gigslYJu5KM3bxsK9yy"); folder.createFile(imgBlob); }
额外优化点
- 增加格式校验:判断分割后是否存在有效的base64字符串,避免空值报错
- 变量命名更清晰,减少混淆
- 直接通过Blob参数指定文件名和MIME类型,简化文件创建流程
内容的提问来源于stack exchange,提问作者Jayco
相关产品推荐
相关产品推荐

