【问题标题】:Google Picker Api sizeBytes is undefinedGoogle Picker Api sizeBytes 未定义
【发布时间】:2017-09-08 19:07:54
【问题描述】:

我们正在开发我们的网络应用程序和 Google Drive 之间的链接机制。我们向用户显示 Google Picker,用户选择一个文件,然后我们通过 $.post 将所选文件链接到 Picker 回调中的数据。一切正常,我们能够在 Picker 回调中获取所选文件的 id、name、mimeType、url 和 sizeBytes。

我们还希望我们的用户从 Picker 上传文件,它也能正常工作,除了一件事。用户上传文件,我们在 Picker 回调中成功获取 data.docs 对象,但这次“sizeBytes”字段未定义。

我们是否错过了什么或做错了什么?为什么在 Picker api 中上传后“sizeBytes”字段未定义?

这就是我们创建 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”是未定义的。

【问题讨论】:

  • 如何获取“sizeByte”元数据?是否首先要获取响应?
  • @noogui 我编辑了我的问题

标签: google-drive-api google-picker


【解决方案1】:

我怀疑 Picker 没有在上传时指定 fields=*。这意味着上传响应将只是最小的文件属性。你需要做一个files.get(id)&amp;fields=*

另请注意,任何 Google 文档(文档、电子表格等)都没有大小。

【讨论】:

    【解决方案2】:

    这就是正在发生的事情。您正在从data.doc[0] 对象访问“sizeBytes”(实际上是fileSize)属性,但那里没有这样的属性。如果您 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,如Handling Google Drive Items 中所述。那份工作,我的朋友,我会留给你。我已经完成了调试部分。

    【讨论】:

    • 谢谢 noogui 实际上我已经尝试过 files.get 刚刚上传但大小再次为空。如果我从 Picker 上传文件,关闭并重新打开它并选择上传的文件,然后我可以获得 sizeBytes。但就在上传过程之后,我没有运气。顺便说一句,如果我将 files.get 用于 Google Drive 中已经存在的文件,它可以正常工作,我可以获得大小。我猜@pinoyyid 指出的是正确的,问题的原因是从 Picker Api 上传文件...
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2019-04-20
    • 2023-03-27
    • 2020-10-04
    • 2022-01-17
    • 2017-05-05
    相关资源
    最近更新 更多