【问题标题】:Sails Skipper: how to read and validate a csv file and exclude the invalid file types during upload?Sails Skipper:如何在上传期间读取和验证 csv 文件并排除无效文件类型?
【发布时间】:2018-02-01 15:43:56
【问题描述】:

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

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

但是,如何读取整个文件流并检查标题和数据等?还有其他类似的 Q,例如 (Sails.js Skipper: How to read the uploaded file stream during upload?)。但是提到的解决方案是使用 skipper-csv 适配器(我不能使用它,因为我已经使用 skipper-s3 上传到 s3)。

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

【问题讨论】:

    标签: file-upload sails.js skipper


    【解决方案1】:

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

    为了读取 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 上传。 希望,这对某人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2017-10-25
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多