如何将 GCP DLP 与文件流结合使用

How to use GCP DLP with a file stream

我正在与 Node.js 和 GCP Data Loss Prevention 合作,尝试在显示 PDF 之前编辑敏感数据。 GCP 对此有很好的文档 here

基本上你拉入了 nodejs 库和 运行 这个

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;

所以通常情况下,我会将文件作为缓冲区,然后像上面那样将其传递给 DLP 函数。但是,我不再将我们的文件作为缓冲区。由于许多文件非常大,我们现在从 FilesStorage 中以 streams 的形式获取它们,就像这样

return FilesStorage.getFileStream(metaFileInfo1, metaFileInfo2, metaFileInfo3, fileId)
      .then(stream => {
        return {fileInfo, stream};
      })

问题是,是否可以在流而不是缓冲区上执行 DLP 图像编辑?如果是这样,如何? 我发现其他一些 questions 说您可以使用 ByteContentItem 进行流式传输,并且 GCP 自己的文档中提到了“流”。但是,我已经尝试将返回的流从 .getFileStream 传递到上面的 byteItem['data'] 属性,但它不起作用。

因此,将流分块到适当大小的缓冲区中最有效。似乎有多种方法可以从您可以在此处使用的流构建缓冲区。

可能相关:Convert stream into buffer?

(原生流接口是一个很好的功能请求,只是还没有。)