使用NodeJS和Node-webkit实现带有进度条的文件上传

3
我正在使用node-webkit创建一个桌面应用程序。 该应用程序扫描一个目录并上传该目录中的所有文件到我的服务器。
我已经成功实现了上传功能(由于无法在服务器端启用流传输,因此只能使用POST请求)。
以下是目前的代码,我正在使用request库:
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

})

我的问题是,在上传过程中,“data”事件不是上传进度,而是从磁盘读取文件的进度。我尝试为表单添加“data”事件,但结果相同。
基本上,我该如何将文件上传到服务器并向用户报告进度。
2个回答

0

你好,感谢你的回答。实际上我不确定这是否有效。例如,如果我选择一个50MB的文件进行上传,输入流在几秒钟内就会完成,而实际的文件上传在我的连接上仍需4-5分钟。也许有另一个库可以用于上传文件并提供进度信息? - jbard
你使用的是哪个版本的Node/Express?这个代码片段对我来说很有效:上传速度变慢是因为我的连接速度慢,而console.log消息的速率也变慢了。 - Paul Mougel
我正在运行Node 10.18。我没有运行Express,服务器只是一个普通的PHP服务器。也许这就是我的问题所在?因为据我所知,PHP服务器不会流式传输结果,它只是等待整个过程准备好后再保存它。 - jbard
这不应该干扰客户端代码。您确定在Node显示“文件已上传”后有网络活动吗? - Paul Mougel
是的,我100%确定。我的上传速度很慢,即使我将我的连接最大化,上传一个50MB文件至少需要3分钟。我在Node中在1-2秒后收到“文件已上传”。我查看我的网络并发现我的上传在接下来的3-4分钟内达到最高点,并且在我的网络活动停止时,在服务器上看到该文件出现并被记录。 - jbard
看起来你应该使用一个事件发射器。 - roland

0
也许可以尝试使用 superagent 代替 request?不确定它是否有所不同,但值得一试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接