使用Google Apps Script构建图片转换API时生成文件损坏问题求助
问题原因与解决方案
问题核心在于你错误使用了ContentService.createTextOutput()处理二进制图片数据——这个服务是专门用于输出文本内容的,它会把二进制字节强制按文本编码转换,直接破坏了图片的原始结构,导致文件损坏。
修正后的代码
function doGet(request) { const params = request.parameter; // 校验必填参数 if (!params.url || !params.type) { return ContentService.createTextOutput("缺少必要参数:url 和 type").setMimeType(ContentService.MimeType.TEXT); } try { // 获取源图片Blob const sourceBlob = UrlFetchApp.fetch(params.url).getBlob(); // 转换图片格式 const convertedBlob = sourceBlob.getAs(params.type); // 直接返回Blob对象,GAS会自动处理二进制传输的响应头 return convertedBlob; } catch (e) { return ContentService.createTextOutput(`转换失败:${e.message}`).setMimeType(ContentService.MimeType.TEXT); } } function test() { const response = doGet({ parameter: { url: "https://www.wpc.ncep.noaa.gov/noaa/noaad1.gif", type: "image/jpeg" } }); // 测试时打印Blob信息验证结果 console.log(`文件名:${response.getName()}, MIME类型:${response.getContentType()}`); }
关键修改说明
- 移除文本输出服务:直接返回转换后的Blob对象,Google Apps Script会自动为其设置正确的
Content-Type和下载响应头,确保二进制数据完整传输。 - 增加参数校验与异常捕获:避免因参数缺失或网络错误导致的无意义报错,提升代码健壮性。
- 无需文本编码转换:图片属于二进制数据,不需要通过
getDataAsString()等文本处理方法转码,直接返回原始字节流即可。
内容的提问来源于stack exchange,提问作者xd1936
相关产品推荐
相关产品推荐

