NodeJS和Node-webkit文件上传进度

时间:2013-11-16 09:03:52

标签: node.js file-upload stream progress-bar node-webkit

我正在使用node-webkit创建桌面应用程序。 该应用程序扫描目录并将该目录中的所有文件上载到我的服务器。

我上传工作正常(我无法在服务器端使用流式传输,因此只使用POST)。

目前这是代码,我正在使用请求库:

var r = request.post("http://myserver.com/upload/");
var upload = fs.createReadStream('path/to/my/file.txt')

var form = r.form();
form.append('new_file', upload);


upload.on("data", function (chunk) {
   upload_progress += chunk.length
})

upload.on("end", function (res) {
    //upload finished

})

我的问题是上传时的“数据”事件不是上传进度,而是来自磁盘进度的读取文件。我尝试在表单中添加“数据”事件,但结果相同。

基本上我如何将文件上传到我的服务器并将进度报告给用户。

2 个答案:

答案 0 :(得分:0)

request uses node-form-data处理表单上传。据我所知,node-form-data没有提供任何进度信息,这意味着我们需要找到一个聪明的解决方法。

node-form-data使用combined-stream,看起来喜欢实现correct pause/resume algorithm。这意味着,即使node-form-data doesn't support Node 0.10 streams,如果请求太慢,它仍将暂停其输入流(文件流)。在我看来,查看文件流发送的字节数足以逼近POST请求的状态。

答案 1 :(得分:0)

也许尝试使用superagent代替request?不确定它是以不同的方式做事,但值得一试。