Google Picker Api sizeBytes не определен

Мы разрабатываем механизм связи между нашим веб-приложением и Google Диском. Мы показываем Google Picker нашим пользователям, и пользователь выбирает файл, и мы связываем выбранный файл с нашими данными в обратном вызове Picker через $ .post. Все работает хорошо, и мы можем получить id, name, mimeType, url и sizeBytes выбранного файла в обратном вызове Picker.

Мы также хотим, чтобы наши пользователи загружали файлы из Picker, и он тоже работает, за исключением одного. Пользователь загружает файл, мы успешно получаем объект data.docs в обратном вызове Picker, но на этот раз поле sizeBytes не определено.

Мы что-то упускаем или делаем что-то не так? Почему поле sizeBytes не определено после загрузки в Picker api?

Вот как мы создаем Google Picker,

var view = new google.picker.View(google.picker.ViewId.DOCS);
var picker = new google.picker.PickerBuilder()
.enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
.setAppId(appId)
.setOAuthToken(oauthToken)            
.addView(view)
.addView(new google.picker.DocsUploadView())
.setLocale(pickerApiLocale)
.setMaxItems(5)
.setCallback(pickerCallback)
.build();
picker.setVisible(true);

Редактировать:

Вот как мы получаем данные обратного вызова;

function pickerCallback(data) {
    if (data.action == google.picker.Action.PICKED) {
        for (var i = 0; i < data.docs.length; i++) {
            var selectedDoc = data.docs[i];
            var params = {
                fileId: selectedDoc.id,
                fileName: selectedDoc.name,
                mimeType: selectedDoc.mimeType,
                webViewLink: selectedDoc.url,
                size: selectedDoc.sizeBytes,
            };
            $.post('myurl',params,function(){
              some code here....
            });
    }
  }
}

Если пользователь загружает файл, sizeBytes не определено.


person cck    schedule 07.09.2017    source источник
comment
Как вы получаете метаданные sizeByte? Нужно ли было получить ответ в первую очередь?   -  person noogui    schedule 08.09.2017
comment
@noogui я редактировал свой вопрос   -  person cck    schedule 08.09.2017


Ответы (2)


Я подозреваю, что Picker не указывает fields=* при загрузке. Это означает, что ответ на загрузку будет содержать только минимальные свойства файла. Вам нужно будет сделать files.get(id)&fields=*.

Также обратите внимание, что любые документы Google (документы, таблицы и т. Д.) Не будут иметь размера.

person pinoyyid    schedule 08.09.2017

Вот что происходит. Вы получаете доступ к свойству sizeBytes (которое на самом деле fileSize) из объекта data.doc[0], но такого свойства там нет. Если вы используете console.log () для этого объекта, вот свойства, к которым вы можете получить доступ:

{id: "dfdsafdsafdsafdsafM", serviceId: "docs", mimeType: "image/png", name: "IMAGE.png", description: "", …}
description
downloadUrl
driveError
driveSuccess
iconUrl
id
isNew
lastEditedUtc
mimeType
name
serviceId
type
uploadId
uploadState
url

В списке нет sizeBytes (fileSize), поэтому вы получаете undefined. Если вы хотите получить доступ к свойству fileSize, вам необходимо использовать files.get, как указано в разделе Обработка элементов Диска Google. И эту работу, друг мой, я оставлю тебе. Я уже сделал отладочную часть.

person noogui    schedule 08.09.2017
comment
Спасибо, noogui, на самом деле я уже пробовал files.get сразу после загрузки, но размер снова равен нулю. Если я загружу файл из Picker, закрою и снова открою его и выберу загруженный файл, тогда я могу получить sizeBytes. Но сразу после загрузки мне не повезло. Кстати, если я использую files.get для файлов, уже существующих на Google Диске, он отлично работает, я могу получить размер. Я думаю, что то, что указал @pinoyyid, верно, причина проблемы заключается в загрузке файла из Picker Api ... - person cck; 08.09.2017