求助:Google Apps Script对接消息API时如何实现带文件的POST请求
求助:Google Apps Script对接消息API时如何实现带文件的POST请求
嘿,我完全懂你现在的困境——之前发文字消息顺顺当当,一加上文件就卡壳了对吧?其实问题核心在于请求格式不匹配:你之前用的是application/json格式提交数据,但这个API要求的是multipart/form-data(就是curl里--form对应的表单格式),JSON根本没法正确传递文件内容。
我给你调整一下代码,改成符合API要求的表单提交方式,重点处理文件的Blob传递:
function sendMessageWithFile(telephone, message, fileId) { var url = "https://apinew.socialhub.pro/api/sendMessage"; telephone = telephone.toString(); // 从Google Drive获取目标文件的Blob对象(这是GAS里处理文件上传的关键) var targetFile = DriveApp.getFileById(fileId); var fileBlob = targetFile.getBlob(); // 构建multipart/form-data格式的表单参数 var payload = { "api_token": "MY_TOKEN", // 替换成你的真实token "phone": telephone, "message": message, "file": fileBlob // 直接传入Blob,GAS会自动处理成表单文件字段 }; var config = { muteHttpExceptions: true, method: "post", payload: payload // 这里不需要手动设置Content-Type!GAS检测到Blob时会自动生成正确的multipart头 }; var response = UrlFetchApp.fetch(url, config); var data = JSON.parse(response.getContentText()); Logger.log(data); // 可以查看日志调试API返回的信息 return response; }
几个关键说明:
fileId是你要发送的文件在Google Drive中的ID(可以从文件的URL末尾获取,比如https://drive.google.com/file/d/[这里就是fileId]/view)- 不用再做JSON序列化了,直接把所有参数放进
payload对象,文件字段直接传Blob就行,和curl里的file=@"文件路径"效果一致 - 一定要删掉之前手动设置的
Content-Type: application/json,否则会和GAS自动生成的表单头冲突
如果还是报错,建议打开Logger.log(response.getContentText())看看API返回的具体错误信息,大概率是文件类型不兼容、token/手机号格式问题这类小细节~
备注:内容来源于stack exchange,提问作者user3347814
相关产品推荐
相关产品推荐

