将 google 驱动器选择器文件转换为 javascript 文件类型

Convert google drive picker file to javascript file type

我正在使用 Google API V3。我有一个场景,我使用 google 驱动器选择器从驱动器中选择一个文件(任何扩展名)并将其发送到服务器进行操作(由于与项目相关的机密信息,无法提及很多细节).

编辑: 我正在尝试使用驱动器选择器从 google 驱动器中选择一个 mpp 文件(MS 项目)并将文件发送到服务器。服务器将 MPP 文件转换为 JSON 并将其返回给客户端 returns,这就是我正在尝试做的。我可以使用普通输入标签实现此目的,但要求是使用 google 驱动器选择器。

我可以通过选择器获取文件,使用 Google 文件 API (files.get) 获取文件详细信息,但我不知道如何进一步转换它进入 JavaScript 文件类型(类似于我们上传文件的输入标签)。

    showDrivePicker({
        title: 'Pick an mpp file',
        selectFolderEnabled: true,
        enableMyDrive: true
    }, function pickerCallback( data ) {
        if ( data[google.picker.Response.ACTION] == google.picker.Action.PICKED ) {
            var doc = data[google.picker.Response.DOCUMENTS][0],
                url = doc[google.picker.Document.URL].split('/view'),
                name = doc.name;

            gapi.client.files.get({
                  fileId: 'xxxxx', 
                  corpora: 'teamDrive',
                  supportsTeamDrives: true,
                  includeTeamDriveItems: true,
                  includeTeamDriveItemsRequired: true,
                  includeItemsFromAllDrives: true,
                  fields: '*',
            }).then((response) => {
               // I have the downloadUrl here, but what should I do with it?
            })
        }
    }, me);

请帮忙解决这个问题。

谢谢

在这种情况下你想做的是:

  1. 从驱动器下载文件
  2. 将其转换为文件对象

您可以通过提供ID并将alt设置为media来下载文件。要创建文件,您可以使用响应主体调用其构造函数,以及来自原始选择器文档信息的文件名和 MIME 类型:

function pickerCallback(data) {
 if (data[google.picker.Response.ACTION] === google.picker.Action.PICKED) {
   const doc = data[google.picker.Response.DOCUMENTS][0]
   gapi.client.drive.files.get({
     fileId: doc.id,
     alt: 'media',
   }).then(function(res) {
     const file = new File([res.body], doc.name, { type: doc.mimeType })
    
     // Do whatever with the file
     console.log(file)
   })
 }
}

参考资料