0

代码的预期功能:

  1. 接收 CSV 文件
  2. 将其写入临时目录
  3. 使用csvtojson库将该文件转换为 JSON
  4. data = 为文件添加前缀
  5. 结果创建JS文件,并将其写入不同的目录

该过程适用于短 CSV 文件。当发送较大的文件(包含超过 20.000 行的 CSV 文件)时,结果数据将减少到大约 1800-2500 行。当我在本地启动应用程序并第一次上传文件时,即使上传大文件,一切正常。如果我更改代码的 readStream 部分中的任何内容并且服务器重新启动,那么一切都很好,所以我猜测需要以某种方式重置读取流。我使用此文档来实现该部分。

编辑 03-09-2020:部署到服务器后,应用程序甚至可以处理大型 CSV 文件

router.post("/", upload.single("productData"), (req, res, next) => {
  const product = new Product({
    _id: new mongoose.Types.ObjectId(),
    productData: req.file.path,
  });
  product
    .save()
    .then(() => {
      let nameOfNewDirectory = req.body.dirName;
      let dir = `./someDirectory/${nameOfNewDirectory}`;

      if (!fs.existsSync(dir)) {
        fs.mkdirSync(dir);
      }

      const readStream = fs.createReadStream(req.file.path);
      const writeStream = fs.createWriteStream(`./${dir}/data.js`, {
        flags: "w",
      });

      writeStream.write("data = ", () => {
        console.log("prefix to a data.js is written");
      });

      readStream
        .pipe(
          CSVToJSON({
            maxRowLength: 65535,
            checkColumn: true,
            downstreamFormat: "array",
            ignoreEmpty: false,
            delimiter: "auto",
          })
        )
        .pipe(writeStream);
    })
});
4

0 回答 0