Ошибка запроса 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. В противном случае загрузка будет выполнена и сохранит все свои метаданные (имя, каталог и т. Д.) И размер, но не откроется правильно.

Другие вопросы по тегам