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
相关产品推荐
相关产品推荐

