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

使用Policy Document配置GCS文件上传时遇InvalidPolicyDocument错误求助

解决GCS InvalidPolicyDocument 错误:词法解析问题

核心错误原因

你遇到的InvalidPolicyDocument错误,细节里的Lexical Error: Unmatched Input: <'>已经明确指向了问题——你的Policy Document使用了单引号('),但JSON规范强制要求双引号(")来包裹所有键和字符串值。

当解码表单里的policy字段值时,会看到它是用单引号编写的:

{'conditions': [ ['starts-with', '$key', '' ], {'acl': 'bucket-owner-read' }, {'bucket': 'cli201509.appspot.com'}, {'success_action_redirect': 'http://cli201509.appspot.com/getpolicydocumentsuccess' }, ['eq', '$Content-Type', 'image/jpeg' ], ['content-length-range', 0, 1000000] ], 'expiration': '2020-06-16T11:11:11Z'}

这种格式不符合JSON语法,GCS的解析器无法识别,所以抛出了词法错误。


分步解决办法

1. 修复Policy Document的JSON格式

把所有单引号替换成双引号,确保JSON完全合规。正确的Policy Document应该是:

{"expiration": "2020-06-16T11:11:11Z", "conditions": [ ["starts-with", "$key", "" ], {"acl": "bucket-owner-read" }, {"bucket": "cli201509.appspot.com"}, {"success_action_redirect": "http://cli201509.appspot.com/getpolicydocumentsuccess" }, ["eq", "$Content-Type", "image/jpeg" ], ["content-length-range", 0, 1000000] ] }

你可以用本地的jq命令或JSON校验工具确认格式正确。

2. 重新生成URL-safe Base64编码的Policy

GCS要求Policy必须是URL-safe的Base64编码:

  • 先把修复后的JSON字符串转换成UTF-8字节流
  • 进行Base64编码
  • 替换编码结果中的+为-,/为_,并去掉末尾的=字符

3. 重新生成Signature

用你的服务账号私钥,对新生成的Base64编码Policy进行HMAC-SHA256签名,然后把签名结果也转换成URL-safe的Base64编码,替换表单里的signature字段值。


额外的表单优化建议

为了避免后续潜在问题,还可以调整这两个表单细节:

  • 表单Action地址:把action="http://storage.googleapis.com"改成action="https://storage.googleapis.com/cli201509.appspot.com",直接指向你的bucket,更符合GCS的POST上传规范。
  • Key字段值:当前key值是cli201509.appspot.com/texst/textasad.jpg,但GCS的key是bucket内的文件路径,不需要包含bucket名称,建议改成texst/textasad.jpg,否则会在bucket里创建一个冗余的前缀文件夹。

完成以上步骤后,替换表单里的policy和signature字段,重新测试上传,应该就能解决这个解析错误了。

内容的提问来源于stack exchange,提问作者bhavin jalodara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:49:46