Estoy trabajando con Node.js y GCP Data Loss Prevention para intentar redactar datos confidenciales de archivos PDF antes de mostrarlos. GCP tiene una gran documentación sobre esto aquí
Esencialmente, extrae la biblioteca nodejs y ejecuta esto
const fileBytes = Buffer.from(fs.readFileSync(filepath)).toString('base64'); // Construct image redaction request const request = { parent: `projects/${projectId}/locations/global`, byteItem: { type: fileTypeConstant, data: fileBytes, }, inspectConfig: { minLikelihood: minLikelihood, infoTypes: infoTypes, }, imageRedactionConfigs: imageRedactionConfigs, }; // Run image redaction request const [response] = await dlp.redactImage(request); const image = response.redactedImage;Entonces, normalmente, obtendría el archivo como un búfer, luego lo pasaría a la función DLP como la anterior. Pero ya no obtengo nuestros archivos como búfer. Dado que muchos archivos son muy grandes, ahora los obtenemos de FilesStorage como flujos , así
return FilesStorage.getFileStream(metaFileInfo1, metaFileInfo2, metaFileInfo3, fileId) .then(stream => { return {fileInfo, stream}; }) La pregunta es, ¿es posible realizar la redacción de imágenes DLP en una transmisión en lugar de un búfer? ¿Si es así, cómo? He encontrado algunas otras preguntas que dicen que puede transmitir con ByteContentItem y la propia documentación de GCP menciona "transmisiones". Pero he intentado pasar el flujo devuelto de .getFileStream a la propiedad byteItem['data'] anterior, y no funciona.
Por lo tanto, dividir el flujo en búferes de tamaño apropiado funcionará mejor aquí. Parece que hay una serie de enfoques para crear búferes a partir de una secuencia que puede usar aquí.
Potencialmente relevante: ¿Convertir flujo en búfer?
(Una interfaz de transmisión nativa es una buena solicitud de función, pero aún no está allí).