Наше приложение нуждается в полном списке пользовательских файлов и папок. Мы используем files.list()
через библиотеку Javascript
(по существу такой же код, как показано в официальном API reference
в качестве примера).
Мы используем область "drive.files
".
Изучая ответ в списке, мы обнаруживаем, что некоторые файлы всегда отсутствуют. Я сделал различные тесты, чтобы понять проблему:
- Файлы явно существуют. Они отображаются в
Google Drive Webapp
и, если я явно запрашиваю их через ID, я могу получить их через API без проблем. - Он воспроизводимый, всегда одни и те же файлы отсутствуют.
- Это не преходяще. Я пробовал на следующий день и все те же файлы отсутствуют. Я знаю несколько странных эффектов в API, которые уходят через некоторое время, но не это.
- Это не одно время (например, некоторые странные вещи поступили не так во время загрузки). Если я повторяю с совершенно другой учетной записью Google, файлы снова отсутствуют. Из небольшого набора из 147 загруженных файлов в одном тесте 4 пропускается вызов
files.list
, в другом тесте с теми же 147 файлами на другой учетной записи отсутствуют 23 файла. - Это происходит только тогда, когда я использую область
drive.files
. Если я уменьшу область действия доdrive
, будут возвращены все файлы. Если посмотреть на "Детали" в Google Диске Webapp, то отсутствующие файлы будут отображаться как созданные нашим Приложением. Похоже, что они каким-то образом потеряли свое происхождение. - Это также происходит, когда я указываю поисковый запрос. Если я вызываю файлы .list с поисковым термином "q: modifiedDate" '2012-06-04T12: 00: 00' ", который также должен возвращать все файлы, те же файлы отсутствуют.
- Я повторил то же самое, что и чистый REST-вызов API, чтобы исключить, что это проблема с библиотекой Javascript. Ошибка остается.
Обновление: Я мог бы отследить его до проблемы с пейджингом и параметром maxResults
. Если я использую разные значения, API возвращает другое количество элементов:
С maxResults=100
я получаю 100 + 100 + 7 = 207.
С maxResults=99
я получаю 99 + 99 + 28 = 226.
С maxResults=101
получается 101 + 101 + 0 = 202.
Последний результат интересен, который дал мне nextLink
, указав, что результатов больше, но массив элементов в последнем ответе был фактически пуст. Это может указывать на ошибку.
Тем не менее, это происходит только в области drive.file
, подсчеты согласуются в полной области drive
.
Я был бы рад услышать идеи об обходном пути. Я знаю о других способах отслеживания файлов пользователей, например. используя фид изменений. Я использую это уже, но для определенной части нашего приложения мне просто нужен надежный и полный список всех наших элементов приложения в учетной записи пользователя.
Еще одно примечание. У нас были другие проблемы с областью "drive.files" (см. Листинг файлов с поисковым запросом возвращает результаты вне области (drive.files.list вызов с использованием области drive.files)). Это оказалось легким решением. Возможно, эта проблема связана.