Javascript 谷歌硬盘RESTAPI

Javascript 谷歌硬盘RESTAPI,javascript,google-drive-api,Javascript,Google Drive Api,我遇到了google drive rest api的问题。我有一个按钮,当用户点击时,我从后端得到一个blob excel文件,并将该文件上传到google drive。该文件正在上传到谷歌硬盘,但当我打开它时,它显示“[objectblob]”。实际内容不在文件中。这是我创建文件的函数。我从这里找到了这个解决方案: 我正在从后端传入文件名和blob excel文件,如下所示: fetch('/home/generateexcel', { method:

我遇到了google drive rest api的问题。我有一个按钮,当用户点击时,我从后端得到一个blob excel文件,并将该文件上传到google drive。该文件正在上传到谷歌硬盘,但当我打开它时,它显示“[objectblob]”。实际内容不在文件中。这是我创建文件的函数。我从这里找到了这个解决方案:

我正在从后端传入文件名和blob excel文件,如下所示:

 fetch('/home/generateexcel', {
                    method: 'POST',
                    body: JSON.stringify(postData),
                    headers: {
                        "Content-Type": "application/json"
                    },
                }).then(function (response) {
                    response.blob().then(function (result)
                        UploadExcelFile('newfile', result)
                    });
                }).catch(function (err) {
                    // Error :(
                });
  • 您想将下载的xlsx文件上载到Google Drive
  • 您已经确认可以下载xlsx文件
  • 上传xlsx文件时,您希望转换为Google电子表格
  • 您可以使用驱动器API和访问令牌上载文件
如果我的理解是正确的,这次修改怎么样?在这次修改中,我使用
FormData()
创建请求主体,并使用
fetch()
请求驱动API。我认为有几种方法可以解决你的情况。所以,请把这看作是其中之一

修改脚本: 我修改了
UploadExcelFile()
。请修改如下内容,然后重试

function UploadExcelFile(name, data) {
  var metadata = {
    name: name,
    mimeType: "application/vnd.google-apps.spreadsheet",
  };
  var form = new FormData();
  form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
  form.append('file', data);
  fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,name,kind', {
    method: 'POST',
    headers: new Headers({'Authorization': 'Bearer ' + gapi.auth.getToken().access_token}),
    body: form
  }).then((res) => {
    return res.json();
  }).then(function(val) {
    console.log(val);
  });
}

在我的环境中,我可以确认这个脚本是有效的。但如果这在你的环境中不起作用,我道歉。

谢谢@Tanaike,你是个救命恩人。我花了将近两天的时间试图弄明白这一点。您的解决方案对我有用。@欢迎光临。我很高兴你的问题解决了。也谢谢你。
function UploadExcelFile(name, data) {
  var metadata = {
    name: name,
    mimeType: "application/vnd.google-apps.spreadsheet",
  };
  var form = new FormData();
  form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
  form.append('file', data);
  fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,name,kind', {
    method: 'POST',
    headers: new Headers({'Authorization': 'Bearer ' + gapi.auth.getToken().access_token}),
    body: form
  }).then((res) => {
    return res.json();
  }).then(function(val) {
    console.log(val);
  });
}