node webkit:将数据导出到csv并提示用户保存文件

时间:2013-12-16 11:17:43

标签: javascript node.js node-webkit

我可以使用节点fs模块在节点webkit上实现导出数据到csv。但现在我想提示用户将文件保存在他/她想要的位置。就像html的下载弹出窗口一样。我尝试了这个code的行,甚至是file dialog。有人可以帮我找到解决方法。这是我的代码。

fs.writeFile("export.csv", data, function(err) {
    if(err) {
       console.log(err);
    } else {
        $('#export_file').show();
        $('#export_file input').on('change', function (event) {
            console.log($(this).val());
            console.log("The file was saved!");
        });
    }
});
<div id="export_file" style="display:none">
    <input type="file" nwsaveas nwworkingdir="/data/input/" />
</div>

2 个答案:

答案 0 :(得分:4)

我在这里找到了一个解决方案http://9ijy.net/blog/view/6

步骤1在您的html文件中,添加如下所示的输入标记块:

<input id="export_file" type="file" nwsaveas style="display:none" nwworkingdir=""/>

步骤2在您的javascript文件中添加一个新功能,如下所示:

function saveFile(name,data) {
    var chooser = document.querySelector(name);
    chooser.addEventListener("change", function(evt) {
      console.log(this.value); // get your file name
     var fs = require('fs');// save it now
fs.writeFile(this.value, data, function(err) {
    if(err) {
       alert("error"+err);
    }
});
    }, false);

    chooser.click();  
  }

步骤3使用如下所示的saveFile(名称,数据)功能将文件保存到您喜欢的位置:

...

_exportCSV="you data to save";

saveFile('#export_file',_exportCSV);

答案 1 :(得分:0)

  • 您正在编写文件对话框代码作为fs.writeFile的回调。一个 回调意味着它将在保存文件后被调用。这是 现在可能会发生什么1)文件写入当前 运行node-webkit应用程序的目录。 2)当文件是 保存没有任何错误,对话框出现。但是这个对话框是 没有帮助。
  • 相反,请先显示对话框并从中获取文件路径(https://github.com/rogerwang/node-webkit/wiki/File-dialogs)。将此路径作为fs.writeFile()中的第一个arg传递。完成。