使用Google Drive REST API v3可续传更新JSON文件遇不可写字段错误
解决Google Drive API v3更新文件时的
The resource body includes fields which are not directly writable错误 嘿,我来帮你搞定这个问题!这个错误的核心原因是你混淆了上传文件内容和更新文件元数据的API调用方式——Drive API把你提交的JSON内容当成了文件的元数据来解析,而pages并不是Drive文件资源的标准可写字段,所以才会抛出这个错误。
下面给你两种针对性的解决方案,根据你的文件大小选就行:
方法一:使用可恢复上传(适合大文件)
可恢复上传分两步走,流程更规范:
初始化上传会话
先发送POST请求获取上传ID,这里可以指定文件的元数据(比如文件名、MIME类型),但别加自定义字段:curl 'https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable' -X POST \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --data '{ "name": "your-target-file.json", "mimeType": "application/json" }'执行后会返回一个带
upload_id的Location响应头,把这个ID记下来。上传JSON文件内容
用刚才拿到的upload_id发送PUT请求,这里的请求体就是你要更新的纯JSON内容,API会直接把它作为文件内容存储,不会当成元数据解析:curl 'https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable&upload_id=[UPLOAD_ID]' -X PUT \ -H 'Content-Type: application/json' \ -H 'Content-Range: bytes 0-26/27' \ -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --data-binary '{"pages": [[]]}'
方法二:使用简单媒体上传(适合小文件,比如你的27字节文件)
如果文件很小,直接一步到位更省心,不用初始化会话:
curl 'https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=media' -X PUT \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --data-binary '{"pages": [[]]}'
额外注意事项
- 一定要确保请求里带有效的
Authorization头(Bearer令牌),你提供的cURL里没显示,应该是移除了敏感信息,记得加上就行。 - 如果之后需要更新文件的元数据(比如文件名、描述),要单独调用普通的
files.update端点(不带uploadType参数),别和文件内容上传混在一起。
内容的提问来源于stack exchange,提问作者Resist Design
相关产品推荐
相关产品推荐

