如何使用MIT App Inventor II将图片上传到Google Drive
问题排查与解决步骤
1 先修正Google App Script代码的显性错误
原代码存在调用方法错误:你传入的是文件夹ID,却调用了读取文件的getFileById方法,会直接抛出异常,修正后的代码如下:
function doPost(e) { var data = Utilities.base64Decode(e.parameters.data); var blob = Utilities.newBlob(data,e.parameters.mimetype,e.parameters.filename); // 注意这里把getFileById改成getFolderById,因为参数是文件夹ID var folderid = Utilities.base64Decode(e.parameters.folderid); DriveApp.getFolderById(folderid).createFile(blob); return ContentService.createTextOutput("Your File Successfuly Uploaded"); }
2 Google App Script端配置排查
- 部署设置必须符合要求:部署时执行身份选择你自己的谷歌账号,访问权限设置为任何人,甚至匿名用户,否则App Inventor的请求会被权限拦截
- 每次修改代码后必须重新部署新版本,且复制的是新部署生成的Web App URL,不是脚本编辑页的URL
- 确认folderid的编码逻辑:代码中对folderid做了base64解码,必须保证App Inventor端传的folderid是提前做过base64编码的内容,如果直接传明文文件夹ID,解码后会得到乱码,无法匹配到目标文件夹
- 确认部署脚本的谷歌账号对目标文件夹拥有编辑权限
3 MIT App Inventor端配置排查
- 确认base64扩展输出的是无多余前缀的纯base64编码,部分扩展输出会自带
data:image/xxx;base64,前缀,直接传入GAS解码会生成无效的Blob文件 - 确认Web1组件的请求方式设置为POST,传递的参数名
data、mimetype、filename、folderid的拼写、大小写和GAS代码完全一致 - 确认应用已经申请了本地存储读取权限,否则无法正常读取选中的图片文件
- 增加调试逻辑:在Web1组件的
GotText事件中弹窗显示返回值,在ErrorOccurred事件中弹窗显示错误信息,可直接定位是服务端报错还是网络/参数问题
4 交叉验证方法
先跳过App Inventor,用接口测试工具模拟POST请求调用GAS的Web App链接,传入构造好的测试参数,确认GAS端可以正常生成文件后,再调试App Inventor端的参数传递逻辑即可。
内容的提问来源于stack exchange,提问作者LookForward Chuang
相关产品推荐
相关产品推荐

