Файл не найден Ошибка 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.
- https://www.googleapis.com/auth/drive Просмотр и управление файлами на вашем Google Диске
- https://www.googleapis.com/auth/drive.appdata Просмотр и управление собственными данными конфигурации на вашем Google Диске
- https://www.googleapis.com/auth/drive.file Просмотр и управление файлами и папками на Google Диске, которые вы открыли или создали с помощью этого приложения
- https://www.googleapis.com/auth/drive.metadata Просмотр и управление метаданными файлов на вашем Google Диске
- https://www.googleapis.com/auth/drive.metadata.readonly Просмотр метаданных для файлов на вашем Google Диске
- https://www.googleapis.com/auth/drive.photos.readonly Просмотр фотографий, видео и альбомов в ваших Google Фото
- https://www.googleapis.com/auth/drive.readonly Просмотр файлов на вашем Google Диске
- https://www.googleapis.com/auth/drive.scripts Изменение поведения ваших скриптов Google Apps Script.
В моем случае я просто не дал доступ к папке своей учетной записи службы. Простое предоставление доступа к нему через веб-интерфейс решило проблему.
Какой адрес электронной почты использовать:
Проверьте адрес электронной почты вашей учетной записи службы здесь:
Адрес электронной почты будет выглядеть так:
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=True
param к методу, и он сработал:
files_res.update(fileId=f_id, body={"name": f_name}, supportsAllDrives=True).execute()
В моем случае я использовал файл client_secret.json, который я создал с адресом gmail, который я использую все время, но я создавал учетные данные с другим адресом электронной почты.
Я столкнулся с той же проблемой, но это другая история. Фактически, я создал учетную запись службы и сгенерировал секрет в формате json. учетная запись службы генерирует случайное письмо с адресом, которое является client_email в вашем секретном json. При попытке загрузить в заданную папку получаю ошибку:
GaxiosError: Файл не найден: 1dQqKNFCSvf3pIvXXXXXX.
Где идентификатор 1dQqKNFCSvf3pIvXXXXXX — это идентификатор родительской папки.
После некоторого расследования отправьте электронное письмо, чтобы учетная запись службы могла получить доступ к папке и поместить туда файлы.