代码之家  ›  专栏  ›  技术社区  ›  Nick

从Google Drive导出docx并转换为base64

  •  3
  • Nick  · 技术社区  · 6 年前

    我正在尝试从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显示 The file is corrupt and cannot be open .

    我觉得有问题 base64 .

    我如何解决?

    更新: 我试图打开一个关于fe的文件,以确保它不是be s问题:

    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 来自 https://gist.github.com/jonleighton/958841

    1 回复  |  直到 6 年前
        1
  •  2
  •   Tanaike    6 年前

    这个变通办法怎么样?在我的环境中, gapi.client.drive.files.export 没用。所以我使用xmlhttpRequest xhr.responseType = "blob" .

    示例脚本:

    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();
    

    参考文献:

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