Javascript 从Google Drive导出docx并转换为base64

Javascript 从Google Drive导出docx并转换为base64,javascript,google-drive-api,Javascript,Google Drive Api,我正在尝试从Google Drive导出DOCX文件 gapi.client.drive.files.export({ fileId: id, alt: 'media', mimeType: _mimeType }).then((_response) => { var fileType = _response.headers['content-type']; var base64 = new Buffer(_response.

我正在尝试从Google Drive导出DOCX文件

gapi.client.drive.files.export({ fileId: id, alt: 'media', mimeType: _mimeType }).then((_response) => {
                var fileType = _response.headers['content-type'];
                var base64 = new Buffer(_response.body, 'utf8').toString('base64');
                var dataURI = 'data:' + fileType + ';base64,' + base64;
我将其发送到
https://content.googleapis.com/drive/v3/files

mimeType: application/vnd.openxmlformats- officedocument.wordprocessingml.document
alt: media
key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
例如,它适用于图像,但Word显示文件已损坏且无法打开

我认为base64有问题

我如何解决它

更新: 我试图在FE上打开一个文件,以确保它不是问题:

var reader = new FileReader();
                var out = new Blob([_response.body], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
                reader.onload = function (e) {
                    window.location.href = reader.result;
                }
                reader.readAsDataURL(out);
结果-
文件已损坏,无法打开

我的最终解决方案:

var xhr = new XMLHttpRequest();
            xhr.open("GET", "https://content.googleapis.com/drive/v3/files/" + id + '/export?alt=media&mimeType=' + _mimeType, true);
            xhr.setRequestHeader('Authorization', 'Bearer ' + this.access_token);
            xhr.responseType = 'arraybuffer'
            xhr.onload = () => {
                var base64 = 'data:' + _mimeType +';base64,' + this.base64ArrayBuffer(xhr.response);
                resolve(base64);
            }
            xhr.send();

base64ArrayBuffer
来自

此解决方案如何?同样在我的环境中,
gapi.client.drive.files.export
也不起作用。因此,我将XMLHttpRequest与
xhr.responseType=“blob”
一起使用

示例脚本: 参考:

如果这不是您想要的,我很抱歉。

您使用PHP中的
数据:
URI?句柄做什么<代码>$f=fopen($output_file,'wb')$数据=分解(',',_post['file']);fwrite($f,base64_解码($data[1]);fclose($f)那你为什么要创建一个
数据:
URI?@SLaks,我正在尝试很多解决方案。这是其中之一。我尝试了
var blob=new blob([\u response.body],{type:“application/vnd.openxmlformats of icedocument.wordprocessingml.document”});var reader=new FileReader();reader.readAsDataURL(blob);reader.onloadend=function(){let base64data=reader.result;}
相同的结果刚刚更新了问题谢谢!是的,我想这是唯一的办法。我可以用
XMLHttpRequest
responseType:arraybuffer
https://content.googleapis.com/drive/v3/files/“+id+'/export?alt=media&mimeType='+\u mimeType
URL@Nick谢谢你提供的更多信息。我很高兴你的问题得到了解决。
var accessToken = gapi.auth.getToken().access_token;
var id = "### fileId ###";
var url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + id + "&format=docx&access_token=" + accessToken;
var xhr = new XMLHttpRequest();
xhr.open('get', url);
xhr.responseType = "blob";
xhr.onload = function() {
  var reader = new FileReader();
  reader.onload = function() {

    console.log(reader.result); // dataURI

  }
  reader.readAsDataURL(this.response);
};
xhr.send();