数据导入导出

实现CSV/Excel数据导入导出

提示词

请实现数据导入导出功能:

需求:
- 导入:CSV/Excel上传,解析,验证,批量入库
- 导出:查询数据导出为CSV/Excel
- 数据量:[如单次1万条]
- 验证:必填、格式、重复检查

要求:
1. 文件解析(流式处理大文件)
2. 数据验证和错误报告
3. 批量插入(分批)
4. 导出时流式响应
5. 进度反馈
6. 模板下载

示例输出

导出CSV:

app.get('/api/export', async (req, res) => {
  res.setHeader('Content-Type', 'text/csv');
  res.setHeader('Content-Disposition', 'attachment; filename=data.csv');
  
  const stringifier = csv.stringify({ header: true });
  stringifier.pipe(res);
  
  // 流式查询,避免内存溢出
  const batchSize = 1000;
  let offset = 0;
  while (true) {
    const rows = await Data.findAll({ limit: batchSize, offset });
    if (!rows.length) break;
    rows.forEach(row => stringifier.write(row.toJSON()));
    offset += batchSize;
  }
  stringifier.end();
});

导入CSV:

app.post('/api/import', upload.single('file'), async (req, res) => {
  const results = { success: 0, errors: [] };
  const parser = csv.parse({ columns: true });
  
  fs.createReadStream(req.file.path)
    .pipe(parser)
    .on('data', async (row) => {
      try {
        validateRow(row); // 验证
        await Data.create(row);
        results.success++;
      } catch (err) {
        results.errors.push({ row, error: err.message });
      }
    });
  
  res.json(results);
});
0

评论 0

更多

登录后可点赞、收藏、评论和举报。

还没有评论,先发起一个具体问题。