Ошибка запроса PUT возобновляемой загрузки Google Drive API. Код состояния: 400. Сообщение: не найдено
В настоящее время я пытаюсь создать систему загрузки, которая берет локальные файлы и загружает их на диск Google. Это делается через Retool. Мой
PUT
запрос возвращается с нужным URI, но мой не работает. Я не смог определить причину после тщательного исследования.
Вот сообщение об ошибке, которое я получаю (брошено через форматировщик JSON для удобства чтения):
{
"data":{
"statusCode":400,
"error":"Bad Request",
"message":"{\"message\":\"Not Found\"}",
"data":{
"message":"Not Found"
},
"metadata":{
"request":{
"url":"https://www.googleapis.com/upload/drive/v3/files?key=---sanitized---%26uploadType%3Dresumable%26upload_id%3D---sanitized---",
"method":"PUT",
"body":"UEsDBBQACAgIAHNbzlIAAAAAAAAAAAAAAAAYAAAAeGw...", //base64 string.
"headers":{
"User-Agent":"Retool/2.0 (+https://docs.tryretool.com/docs/apis)",
"Content-Transfer-Encoding":"base64",
"Content-Length":535487,
"Authorization":"---sanitized---",
"X-Retool-Forwarded-For":"104.129.199.15"
}
},
"headers":{
"x-guploader-uploadid":[
"--READACTED--"
],
"vary":[
"Origin, X-Origin"
],
"content-type":[
"text/html; charset=UTF-8"
],
"content-length":[
"9"
],
"date":[
"Fri, 10 Sep 2021 01:58:07 GMT"
],
"server":[
"UploadServer"
],
"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\""
]
},
"status":404,
"statusText":"Not Found"
}
},
"errorData":"Not Found",
"displayOptions":{
"hideToast":false
},
"trigger":"NATURAL_FAILURE"
}
URI соответствует URI, записанному из
PUT_QUERY.headers.location[0]
в совершенстве. Мой ключ API действителен, я даже декодировал строку base64 обратно в документ Excel, чтобы дважды проверить, было ли оно повреждено, и у меня не было представления о том, что могло быть причиной этого.
Вот границы, которые я дал для используемого токена Oauth2:
https://www.googleapis.com/auth/docs
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.appdata
https://www.googleapis.com/auth/drive.file
https://www.googleapis.com/auth/drive.metadata
https://www.googleapis.com/auth/drive.metadata.readonly
https://www.googleapis.com/auth/drive.photos.readonly
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive.apps.readonly
https://www.googleapis.com/auth/drive.activity
https://www.googleapis.com/auth/drive.activity.readonly
В случае, если это поможет, мой
POST
запросы выглядят так ..
{
"request":{
"url":"https://www.googleapis.com/upload/drive/v3/files?key=--sanitized--&uploadType=resumable",
"method":"POST",
"body":"{"name":"03 Mar 21 Conv--sanitized--.xlsx","parents":"[1NJ--sanitized--ka5W4Zz9Tc]"}",
"headers":{
"Content-Type":"application/json; charset=UTF-8",
"User-Agent":"Retool/2.0 (+https://docs.tryretool.com/docs/apis)",
"Authorization":"Bearer ---sanitized---",
"X-Content-Length":535487,
"X-Upload-Content-Type":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
}
}
1 ответ
Нашел ошибку. Что-то в том, как добавлялась подстрока url, создавало плохую ссылку. Изменен код, чтобы вытащить только upload_id, и теперь он работает. Другая ошибка с этим кодом, которая, я надеюсь, может помочь кому-то другому, заключается в том, что api диска Google возобновляется
PUT
нужен
Content-Encoding
заголовок, а не
Content-Transfer-Encoding
. В противном случае загрузка будет выполнена и сохранит все свои метаданные (имя, каталог и т. Д.) И размер, но не откроется правильно.