You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中使用GTLRDriveQuery_FilesUpdate覆盖Google Drive文件失败问题

解决Google Drive App Data Folder文件无法通过GTLRDriveQuery_FilesUpdate覆盖的问题

问题根源

你的代码没有指定文件所在的App Data Folder私有空间,Drive API默认会在用户的普通存储空间查找文件,即使fileId正确,也无法定位到目标文件,导致请求无报错但实际未修改内容。

修复后的代码

let fileMetadata = GTLRDrive_File()

let query = GTLRDriveQuery_FilesUpdate.query(
    withObject: fileMetadata,
    fileId: "---fileId_from_backup.abc---",
    uploadParameters: GTLRUploadParameters(
        data: data,
        mimeType: "application/octet-stream"
    )
)

// 关键:指定操作的空间为App Data Folder
query.spaces = "appDataFolder"

service.executeQuery(query) { _, result, error in
    guard error == nil else {
        fatalError("文件更新失败:\(error!.localizedDescription)")
    }
    
    if let updatedFile = result as? GTLRDrive_File {
        print("文件内容已成功覆盖,文件ID:\(updatedFile.identifier ?? "")")
    }
}

补充说明

  • App Data Folder是Google Drive为应用提供的私有存储区域,所有针对该区域内文件的CRUD操作,都必须通过spaces参数明确指定appDataFolder,否则API无法访问目标文件。
  • 如果需要同时更新文件元数据(如文件名、描述),可以直接在fileMetadata对象中设置对应属性,例如fileMetadata.name = "new_backup_name.abc"。
  • 上传参数的mimeType保持application/octet-stream即可,这是通用二进制文件类型,适用于备份文件场景。

内容的提问来源于stack exchange,提问作者Bruno Muniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:10:25