Hummus.JS чтение / запись из Google Cloud Storage
В связи с проблемой, о которой я сообщил для 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
преобразование и переключение на потоки.