Файл не найден Ошибка Google Drive API

Я использую Drive REST API для загрузки файла. Я делаю запрос GET, используя идентификатор файла, и я получаю file not found exception,

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "File not found: xxxxx",
    "locationType": "other",
    "location": "file"
   }
  ],
  "code": 404,
  "message": "File not found: xxxxx"
 }
} 

Я также сгенерировал apikey и использую его в своем запросе GET. Файл существует, поэтому я не уверен, что мне здесь не хватает.

8 ответов

Решение

Это решено. Я не предоставлял правильный access_token при выполнении запроса GET для метаданных файла. Я восстановил код авторизации access_token и мой код работает.

Убедитесь, что объемы корректируются

var url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: ['https://www.googleapis.com/auth/drive.file',
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/drive.file',
    'https://www.googleapis.com/auth/drive.metadata'
  ]
});

Drive API объявляет следующие области. Выберите, какие из них вы хотите предоставить APIs Explorer.

Sorce: https://developers.google.com/apis-explorer/

В моем случае я просто не дал доступ к папке своей учетной записи службы. Простое предоставление доступа к нему через веб-интерфейс решило проблему.

Какой адрес электронной почты использовать:

Проверьте адрес электронной почты вашей учетной записи службы здесь:

https://console.cloud.google.com/iam-admin/serviceaccounts?project=NAME_OF_PROJECT&supportedpurview=project

Адрес электронной почты будет выглядеть так:

      name-of-service-account@name-of-project.iam.gserviceaccount.com 

Если вы получаете такой ответ:

      <HttpError 404 when requesting https://www.googleapis.com/drive/v3/files/REDACTED_FILE_ID/copy?alt=json returned "File not found: REDACTED_FILE_ID.". Details: "[{'domain': 'global', 'reason': 'notFound', 'message': 'File not found: REDACTED_FILE_ID.', 'locationType': 'parameter', 'location': 'fileId'}]">

И fileId указывает на файл на общем диске, вам нужно будет включить supportsSharedDrives=true в параметры вашего запроса.

Google предоставляет более подробную информацию об этом в своей статье о поддержке общего диска .

Вот небольшой пример с Python для создания копии:

      googledrive = build('drive', 'v3', credentials=creds)

copy_response = googledrive.files().copy(
    fileId=TEMPLATE_SPREADSHEET_ID,
    body={
        "parents": [
            report_folder_id,
        ],
        'title': report_title
    },
    supportsAllDrives=True
).execute()

Чтобы запустить это, вам нужно смешать его с примером кода из Python Quickstart для Google Drive API.

Я бы проверил, является ли файл, метаданные которого вы пытаетесь получить, частью общего диска; если это так, вам нужно установить supportsTeamDrives=True в запросе.

Я добрался до этого вопроса, потому что при использовании updateметод.

Я использовал эту строку в Python для выполнения метода:

      files_res.update(fileId=f_id, body={"name": f_name}).execute()

Я мог бы перечислить общий файл и его родительский файл в порядке, но обновление не удалось, независимо от области действия этой ошибки:

      ...
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "File not found: 1YqV...",
    "locationType": "parameter",
    "location": "fileId"
   }
  ],
  "code": 404,
...

я добавил supportsAllDrives=Trueparam к методу, и он сработал:

      files_res.update(fileId=f_id, body={"name": f_name}, supportsAllDrives=True).execute()

В моем случае я использовал файл client_secret.json, который я создал с адресом gmail, который я использую все время, но я создавал учетные данные с другим адресом электронной почты.

Я столкнулся с той же проблемой, но это другая история. Фактически, я создал учетную запись службы и сгенерировал секрет в формате json. учетная запись службы генерирует случайное письмо с адресом, которое является client_email в вашем секретном json. При попытке загрузить в заданную папку получаю ошибку:

GaxiosError: Файл не найден: 1dQqKNFCSvf3pIvXXXXXX.

Где идентификатор 1dQqKNFCSvf3pIvXXXXXX — это идентификатор родительской папки.

После некоторого расследования отправьте электронное письмо, чтобы учетная запись службы могла получить доступ к папке и поместить туда файлы.

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