帆船长:如何读取和验证 CSV 文件并在上传过程中排除无效文件类型?



我正在尝试编写一个将文件上传到 S3 位置的控制器。但是,在上传之前,我需要验证传入的文件类型是否为 csv。然后我需要读取文件以检查文件中的标题列等。我按照以下代码片段获得了文件类型:

req.file('foo')._files[0].stream  

但是,如何读取整个文件流并检查标头和数据等?还有其他类似的问题,如(帆.js船长:如何在上传过程中读取上传的文件流?但是提到的解决方案是使用skipper-csv适配器(我不能使用它,因为我已经使用skipper-s3上传到s3(。

有人可以发布一个关于如何在上传前读取上游并执行任何验证的示例吗?

以下是我的问题是如何解决的: 我正在制作流的副本以在实际上传之前进行验证。然后检查我对原始流的验证,一旦通过,我将复制的流上传到我想要的位置。

为了读取 csv 流,我找到了一个 npm 包:csv-parser(https://github.com/mafintosh/csv-parser(,我觉得它很容易处理标头、数据等事件。

为了创建流的副本,我使用了以下逻辑:

const upstream = req.file('file');
const fileStreamMap = {};
const fileStreamMapCopy = {};
_.each(upstream._files, (file) => {  
const stream = PassThrough();
const streamCopy = PassThrough();
file.stream.pipe(stream);
file.stream.pipe(streamCopy);
fileStreamMap[fileName] = stream;
fileStreamMapCopy[fileName] = streamCopy;
});
// validate and upload files to S3, if Valid.
validateAndUploadFile(fileStreamMap, fileStreamMapCopy);
}

validateAndUploadFile(( 包含我的 csv 上传的自定义验证逻辑。

此外,我们可以使用 aws-sdk(https://www.npmjs.com/package/aws-sdk( 进行 s3 上传。 希望,这对某人有帮助。

相关内容

最新更新