Как я могу получить Google Do c в виде файла PDF с помощью Drive API и отправить этот большой двоичный объект своему потребителю API? - PullRequest
1 голос
/ 06 мая 2020

Я использую Express, Node и Google Drive API. Я пытаюсь ответить на вызов API моей конечной точки с помощью большого двоичного объекта файла PDF. Но я не хочу сохранять файл, когда получаю его из Drive API, я просто хочу сохранить его в переменной, преобразовать в base64 и отправить своему потребителю API.

Краткий обзор что происходит. Я застрял на шагах 3-4. 1. Потребитель вызывает мою конечную точку API с полезными данными, содержащими платежную информацию. 2. Я создаю новый документ из шаблона и использую полезные данные для заполнения документа с помощью Docs API. 3. Я экспортирую документ как PDF. 4. Я отправляю ответ своему потребителю API с каплей Документа из шага 3.

Как я могу этого добиться?

Почему я хочу достичь этот? По сути, я стараюсь избегать лишней работы, чтобы загрузить файл и где-то его сохранить, потому что тогда мне нужно другое подключение к чему-то. Если я не могу этого избежать, когда я захочу попытаться справиться с этим в GCP с помощью Buckets. Так что рекомендации там тоже будут полезны.

Ниже приведен обзор моего кода

// this works
const driveAPI = google.drive({version:"v3", auth: client});
const fileId = await createDocFromTemplate();
const doc = updateDoc( fileId, req.body );

// now it gets tricky
const PDF_FILE = exportDocAsPdf(doc); // how can I temporarily store pdf to a variable?
const PDF_AS_BASE = transformPdfToBase64(PDF_FILE); // how can I convert pdf to base64?

// this is what I want to send back to the API consumer
res.send({
  id: fileId,
  fileAsPdf : PDF_AS_BASE
})

1 Ответ

1 голос
/ 07 мая 2020

Я считаю, что ваша цель следующая.

  • Вы хотите экспортировать Документ Google, не создавая файл в качестве данных base64.
  • Вы хотите достичь этого, используя googleapis с Node.js.
  • Вы уже смогли экспортировать Google Document с помощью Drive API.

Для этого, как насчет этого ответа?

К сожалению, я не вижу ваш сценарий updateDoc( fileId, req.body ), exportDocAsPdf(doc) и transformPdfToBase64(PDF_FILE). Итак, в этом ответе я хотел бы предложить образец сценария для возврата данных base64 в формате PDF путем ввода идентификатора файла Google Document.

Пример сценария:

В этом случае входные и выходные значения - это идентификатор файла документа Google и данные base64 формата PDF, соответственно.

async function exportFile(drive, documentId) {
  const res = await drive.files.export(
    {
      fileId: documentId,
      mimeType: "application/pdf",
    },
    { responseType: "arraybuffer" }
  );
  return Buffer.from(res.data).toString("base64");
}

const documentId = "###";  // Please set the Google Document ID

const driveAPI = google.drive({ version: "v3", auth: client });
const base64 = await exportFile(driveAPI, documentId).catch((err) => {
  if (err) console.log(err);
});
console.log(base64);
  • В этом случае документ Google экспортируется как формат PDF. В то время данные являются буфером массива. Таким образом, данные base64 извлекаются с использованием Buffer.from(res.data).toString("base64").

Ссылки:

...