Экспортируйте docx из Google Drive и конвертируйте в base64 - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь экспортировать файлы DOCX с Google Диска.

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

Это работает, например, для изображений, ноСлово показывает The file is corrupt and cannot be open.

Я думаю, что-то не так с base64.

Как мне решить эту проблему?

ОБНОВЛЕНИЕ: Я пыталсяоткройте файл на FE, чтобы убедиться, что это не проблема BE:

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

Результат - The file is corrupt and cannot be open

МОЕ ФИНАЛЬНОЕ РЕШЕНИЕ:

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 Ответ

0 голосов
/ 25 мая 2018

Как насчет этого обходного пути?Также в моем окружении 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();

Ссылка:

Если это не то, что вы хотите, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...