По проблеме, о которой я сообщил для Hummus.js: # 342 , у меня проблемы с записью прилагаемого PDF в Google Cloud Storage.
Простейшим MWE, использующим функции Firebase, является:
const getRawBody = require('raw-body')
const admin = require('firebase-admin')
function asBuffer (filename) {
const bucket = admin.storage().bucket()
const file = bucket.file(filename)
return getRawBody(file.createReadStream())
}
function writePdf (buffer, writeStream) {
const pdfWriter = hummus.createWriter(
new hummus.PDFStreamForResponse(writeStream))
}
const rstream = new hummus.PDFRStreamForBuffer(buffer)
pdfWriter.appendPDFPagesFromPDF(rstream) // ? Memory error / timeout.
}
const buffer = asBuffer('gcs-path.pdf')
const file = bucket.file('new.pdf')
const fileOptions = {}
const writeStream = file.createWriteStream(fileOptions)
writePdf(buffer, writeStream)
Функции Firebase постоянно завершаются с ошибкой на appendPDFPagesFromPDF
с ошибкой или превышением лимита памяти.
Этот рабочий процесс подходит для других типов записываемых потоков (например, memorystream
и файловых потоков).
Этот пример может быть упрощен жестким кодированием простого PDF, но стоит отметить это, поскольку рассматриваемая проблема, похоже, связана с потоковой передачей - и в идеале этот процесс можно было бы еще больше упростить для удаления промежуточного звена Buffer
преобразование и переключение на потоки.