Google Apps Script中UrlFetchApp.fetch获取HEIC图片报异常
Google Apps Script下载HEIC图片报错的解决方案
问题原因
UrlFetchApp对HEIC格式的处理存在兼容性限制:一方面部分服务器会针对请求头做格式校验,默认的UrlFetchApp请求头可能无法触发服务器返回正确的HEIC二进制数据;另一方面,UrlFetchApp内部对非标准图片格式的响应解析逻辑存在缺陷,导致直接抛出未预期错误。
可行替代方案
方案1:模拟浏览器请求头并启用异常捕获
通过自定义User-Agent模拟浏览器请求,同时开启muteHttpExceptions获取详细响应信息,避免直接抛出未预期错误:
function fetchHEICImage() { var url = "https://3.files.edl.io/4eac/23/03/30/003755-09ee1570-e7d5-4cd9-a2c8-a6380797f81b.heic"; var options = { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' }, muteHttpExceptions: true }; var response = UrlFetchApp.fetch(url, options); Logger.log("响应状态码: " + response.getResponseCode()); if (response.getResponseCode() === 200) { var imageBlob = response.getBlob().setName("downloaded.heic"); DriveApp.createFile(imageBlob); Logger.log("HEIC图片已成功保存到云端硬盘"); } else { Logger.log("请求失败,响应内容: " + response.getContentText()); } }
方案2:手动处理二进制数据构建Blob
绕过UrlFetchApp的自动解析逻辑,直接获取原始二进制数据并手动创建Blob:
function fetchHEICAsBinary() { var url = "https://3.files.edl.io/4eac/23/03/30/003755-09ee1570-e7d5-4cd9-a2c8-a6380797f81b.heic"; var options = { muteHttpExceptions: true, headers: { 'User-Agent': 'Mozilla/5.0' } }; var response = UrlFetchApp.fetch(url, options); if (response.getResponseCode() === 200) { var binaryData = response.getContent(); var blob = Utilities.newBlob(binaryData, "image/heic", "downloaded.heic"); DriveApp.createFile(blob); Logger.log("HEIC图片已保存到云端硬盘"); } else { Logger.log("请求失败,状态码: " + response.getResponseCode()); } }
关键说明
- 设置
User-Agent是为了通过服务器的格式校验,确保返回正确的HEIC数据; muteHttpExceptions允许获取错误响应的详细信息,方便排查请求失败的具体原因;- 手动构建Blob可以避免UrlFetchApp内部对图片格式的解析限制,直接处理原始二进制流。
内容的提问来源于stack exchange,提问作者tomasaazevedo
相关产品推荐
相关产品推荐

