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

使用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文件资源的标准可写字段,所以才会抛出这个错误。

下面给你两种针对性的解决方案,根据你的文件大小选就行:

方法一:使用可恢复上传(适合大文件)

可恢复上传分两步走,流程更规范:

  1. 初始化上传会话
    先发送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记下来。

  2. 上传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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:38:42