在csv中为用户导出大数据

时间:2013-06-16 17:11:53

标签: export-to-csv

我正在尝试建立一个系统,允许用户以csv格式导出数据。格式化csv格式的数据没有问题。我在处理csv导出数据的请求时遇到了问题。假设用户请求导出所有数据,这是巨大的。我认为这不是要求用户等待直到请求完成的最佳方式吗?我是否应该告诉用户数据导出正在进行中,我们会在完成后通知?如果是的话,我应该使用后台流程吗?

2 个答案:

答案 0 :(得分:0)

如果可能,请定义某种可配置的“设置”,默认为10Mb。如果你可以告诉导出将超过10Mb,你问用户是否要导出这么大的行集。如果可能的话,估计尺寸并让它们知道它的大小。如果在运行后台导出时向它们显示进度条,则必须使用某种过程来处理通信以将其传递回用户命令表单。在表单上有一个选项可以将该设置更改为更接近他们想要的数字作为警告级别。

答案 1 :(得分:0)

我终于使用nodejs以csv格式向用户提供流数据。

function csvExport(req, res){
   mysqlPool.getConnection(function(err, connection){
        if(err){
            throw err;
        }
        res.header('Content-disposition', 'attachment; filename=connects.csv');
        res.header('Content-Type', 'text/csv');

        var csv_header_row = "Email,First Name,Last Name,Status,Created\n";
        res.write(csv_header_row);
        var query = connection.query('SELECT * FROM contacts where user_id = ? AND deleted = 0', [req.params.user_id]);
            query
            .on('error', function(err) {
                //handle error
            })
            .on('fields', function(fields) {

            })
            .on('result', function(row) {
                var csv_row = row.email+','+row.first_name+','+row.last_name+','+row.status+','+row.created+"\n";
                res.write(csv_row);
            })
            .on('end', function() {
                res.end('', function(){
                    console.log('done');
                });
            });
          });
}