首页 > 解决方案 > REST API (XML):执行复制时出现 400 错误请求(缺少复制源)

问题描述

我正在尝试使用 XML API 和 x-goog-headers 复制 Google Cloud Storage 上的对象。即使存在 x-goog-copy-source 标头,也会收到带有“缺少复制源”的 400 错误请求。

PUT /New%20Folder%201/_gsdata_/_saved_/goodsync-server-geminilake.spk HTTP/1.1\r
Host: mike-bucket-12387691.storage.googleapis.com\r
Authorization: AWS4-HMAC-SHA256 Credential=GOOG1ERKJAO4BIEN7U64VO5IPJCDFLRCVBNE4ZH55WHHNSHKC5SLZ2MTHBPNY/20210706//s3/aws4_request, SignedHeaders=host;x-goog-copy-source;x-goog-date, Signature=bcd1626273229616cc257163f6e503462a2537d9266a66e15490d1cfcdb07cac\r
Connection: Keep-Alive\r
Content-Length: 0\r
Date: Tue, 06 Jul 2021 21:46:29 +0000\r
User-Agent: GstpClient/11.7.5.9 (Windows 10; 10.0.19042-2)\r
x-goog-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\r
x-goog-copy-source: /mike-bucket-12387691/New%20Folder%201/goodsync-server-geminilake.spk\r
x-goog-date: 20210706T214629Z\r

=>

HTTP/1.1 400 Bad Request\r
X-GUploader-UploadID: ADPycdu-qroVy9DqW5sRwCfTxtzEiN7ju6LqALc_HR1ofgoIX7lTPZuZAr4UUbg2LfzB-UgJPdzdekt9KXzYoQHxVTY\r
Content-Type: application/xml; charset=UTF-8\r
Content-Length: 155\r
Vary: Origin\r
Date: Tue, 06 Jul 2021 21:46:29 GMT\r
Server: UploadServer\r
Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"\r
\r
<?xml version='1.0' encoding='UTF-8'?><Error><Code>InvalidArgument</Code><Message>Invalid argument.</Message><Details>Missing copy source</Details></Error>

标签: xmlgoogle-apigoogle-cloud-storagebad-request

解决方案


您的 x-goog-copy-source 中的值看起来格式不正确。

我建议您尝试运行这样的命令,以查看 gsutil 生成的 HTTP 请求:

gsutil -o GSUtil:prefer_api=xml -d cp gs://your-source-bucket/your-source-object gs://your-dest-bucket/your-dest-object

然后,您可以将它生成的标头与您使用的标头进行比较。


推荐阅读