0

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

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

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

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

4

1 回答 1

0

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

为了阅读 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 上传。希望,这可以帮助某人。

于 2017-09-11T21:30:01.250 回答