google-apps-script - 在插件/应用程序脚本中拦截或获取 Google Drive 文件保存和打开的回调
问题描述
我想为 Google Drive 构建和附加组件,在文件上传时和打开/下载之前对文件进行额外的预处理/装饰。例如添加/验证数字签名,调用第 3 方服务传递文件元数据,转换为不同的 mime 类型,使用第 3 方服务生成的自定义密钥加密/解密某些文件。我查看了所有 API 并没有找到任何允许拦截文件上传/下载并进行预处理的功能(例如拦截上传的内容,将其读取为 blob,进行处理,然后将其保存到 Google Drive 文件夹,稍后当用户以对用户透明的方式下载文件,再次对文件内容进行预处理/验证并返回最终结果。
拦截内容的另一种可能性是尝试拦截文件选择/上传事件并更改文件扩展名或临时文件夹的路径,然后触发处理脚本并将结果保存到原始目的地。
我更喜欢避免通过我的自定义后端代理文件上传/下载,在插件/应用程序脚本的上下文中执行所有必需的处理。
我对 AppsScript GSUite Drive API(文件、文件夹、驱动器类)与 Google Drive v2 API 与 Changes.watch()、Channels 等的关系感到有些困惑……后者仅用于后端吗?我看不到 AppsScript API 提供的任何事件/回调概念,理论上应该在当前用户的上下文中运行我的插件。
我希望我能够在这里就 API 提出更具体的问题,但目前我正在努力理解如何为我的插件做基本的钩子来操作文件。
解决方案
你不能拦截它们。使用Drive Add-on,您只能在用户进入 Drive 主页或用户选择文件时触发功能。使用 API,您可以查看何时修改文件以获取通知,但这将在更改完成后进行,而不会拦截更改过程。
如果您使用OnItemsSelectedTrigger,则需要在用户选择文件时提示/返回卡片,在此卡片中,您可以设置按钮,当用户单击时,它可以触发不同的操作。
推荐阅读
- c - Pods 处于 CrashLoopBackOff 中,并且基于 C 的应用程序的就绪探测失败
- sql - 识别客户在最近一天访问的第一页
- c# - 仅在线程运行时清理 webdriver,而不关闭在其他线程中运行的所有驱动程序
- javascript - Redux Reducer 中的 Action.type 未定义错误
- python - 给定向量 X 和 Y,计算数组 C 使得 C[i, j] = 1 / (x[i] - y[j])
- r - 从 commandlne ubuntu 运行 R 时出错:加载共享库时出错:libpcre.so.1:无法打开共享对象文件
- c# - 为什么我们不需要在 HttpGet Create 中返回 View(new Person())?
- php - 如何使用一个查询删除数据库条目<实际日期与单独字段中的年月日值?
- laravel - 一般是否可以导入用户的linkedin职位或个人资料?
- .net - 在控制台应用程序中使用实体框架运行一系列脚本 (.sql) 文件