Angular2在浏览器下载文件[Object String](HAPI)

时间:2016-10-26 18:01:43

标签: file csv angular download hapijs

我正在尝试在服务器端生成一个csv文件,然后将其发送到客户端并下载该文件。

在我的服务器端,我有以下代码: function exportUsersToCSV(request,reply){

let payload = request.payload;
let users = payload.users; //array of json objects users

var fields = ["firstName", "level"];
var csv = json2csv({ data: users, fields: fields });

fs.writeFile('./../../temp/file.csv', csv, function (err) {
    if (err) {
        console.error(err);
        return reply({ ok: false, message: err.message });
    }
    fs.open('file.csv', 'r', function (err, file) {
        if (err) {
            console.error("ERROR: " + err.message);
            return reply({ ok: false, message: err.message });
        }


        return reply({ ok: true, result: file, type: 'text/csv' });
    });
});
}

我现在不知道为什么但是如果我记录了我得到一个数字,但是如果我这样做,我会看到该文件很有竞争力:

var buffer = new Buffer(100);
    fs.read(file, buffer, 0, 100, 0, function (err, num) {
    console.log(buffer.toString('utf8', 0, num));
});

在API我有以下内容:

return Request(options).then((response) => {
                if (response.ok) {
                //TODO: If file...
                    if (response.type == "text/csv") {
                        console.log("API RESULT: " + response.result);
                        reply(response.result)
                            .header('Content-Type', 'text/csv')
                            .header('Content-Disposition',      'attachment; filename=file.csv');
                    } else {
                        return reply(response.result)
                    }
                } else {
                    return reply(Boom.badRequest(response.message));
                }
            })

在我的客户端,我有:

exportUsersToCSV(users) {
    let body = JSON.stringify(
        {
            users: users
        });

    let options = Shared.getOptions();
    return this.http.post(Globals.ApiUrl +      "/admin/users/exportUsersToCSV", body, options)
        .map((res) => {
            return res.text();
        });
}

然后:

exportUsersToCSV(users) {

    this.usersService.exportUsersToCSV(users).subscribe((csvFile) => {
        let fileType = Object.prototype.toString.call(csvFile);
        console.log("fileType: " + fileType);
    },
        error => { console.error("ERROR: " + error.message) }
    );
}

如果我记录了fileType,我会得到[Object String]。我可以将此文件作为CSV下载到我的浏览器吗?如果是,怎么样?

0 个答案:

没有答案