google-apps-script - 在提交 Google 表单时找不到具有给定 ID 的项目
问题描述
我创建了一个在 Google 表单上运行 onSubmit 的脚本。它应该获取上传到表单的图像的 ID,将图像作为 Blob 获取,然后将其转发到某个电子邮件地址。问题是,有时(大约十分之一),脚本会出现以下错误:
例外:找不到具有给定 ID 的项目,或者您无权访问它。在 on_Submit(代码:6:24)
我认为这与谷歌将文件上传/移动到云端硬盘所需的时间有关,所以我设置了一个超时来给它一些时间。错误仍然出现,频率稍低一些。有谁知道这可能出错的地方?
编码:
function on_Submit(e) {
Utilities.sleep(30 * 1000)
var res = e.response
var image_id = res.getItemResponses()[0].getResponse()
var image = DriveApp.getFileById(image_id).getBlob()}
on_Submit(e) 函数链接到手动触发器以启用 DriveApp。谢谢
解决方案
一些响应结果是有多个文件上传。对这个问题的回答是一组 ID。这是正确的代码:
Utilities.sleep(30 * 1000)
var res = e.response
var image_id = res.getItemResponses()[0].getResponse()
console.log(image_id)
if(Array.isArray(image_id)){
var images = [];
for(var i in image_id){
var id = image_id[i]
var image = DriveApp.getFileById(id).getBlob()
images.push(image)
}
console.log(images)
GmailApp.sendEmail(SOME_EMAIL, SUBJECT, BODY, {attachments: images})
}
else{
var image = DriveApp.getFileById(image_id).getBlob()
GmailApp.sendEmail(SOME_EMAIL, SUBJECT, BODY, {attachments: [image]})
}
推荐阅读
- amazon-web-services - 使用单个 Lambda 函数将多种文件类型上传到 S3
- c++ - 在 VS2019 中编辑并继续
- html - 淘汰赛 JS 只计算 maxLength 属性中的数字
- javascript - 希望 Css 下拉子菜单在单击时而不是在悬停时下降
- typescript - RXJS:为什么在发出值后订阅的观察者也会收到值?
- python - 如何使用 django 和 celery 在用户(或其他属性)基础上定义队列的异步任务?
- r - 如何使用 R 池将参数传递给新数据框以进行 SQL UPDATE
- jquery - Mesonet API JSON 对 html 表的响应
- c# - 如何在列表中选择某些属性
- json - AWS DynamoDB 向现有表添加值的问题