使用GAS向Google Drive上传文件时如何保留历史版本而非生成多份副本
实现方法
你当前调用files.create接口的逻辑是每次上传都创建全新的独立文件,要实现和Drive UI操作一致的「保留同一文件、留存历史版本」效果,需要先判断目标路径下是否存在同名文件,存在则调用files.update接口覆盖内容即可,Google Drive会自动为文件生成新的历史版本,不会生成副本。
完整调整后代码示例:
# 1. 先查询目标文件夹下是否已有未被删除的同名文件 response = service.files().list( q=f"name = '{remotefilename}' and '{folderId}' in parents and trashed = false", spaces='drive', fields='files(id)' ).execute() existing_files = response.get('files', []) # 2. 初始化上传对象 media = MediaFileUpload( filename, mimetype=mimetype, resumable=True ) # 3. 判断走更新还是新建逻辑 if existing_files: # 已有同名文件,调用update更新内容,自动留存历史版本 file_id = existing_files[0]['id'] request = service.files().update( fileId=file_id, media_body=media ) else: # 无同名文件,走原有新建逻辑 request = service.files().create( media_body=media, body={'name': remotefilename, 'parents': [folderId]} )
注意事项
- Google Drive默认会保留文件最近100个版本或30天内的所有版本,超出限制的旧版本会被自动清理。如果需要永久保留指定版本,可以调用
revisions.update接口将对应版本的keepForever参数设置为True - 如果你需要同步本地文件的修改时间等元数据到Drive,可以在
files.update的请求参数中添加body字段传入对应的元数据配置
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

