我正在使用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
})
我的问题是上传时的"数据"事件不是上传进度,而是从磁盘进度读取文件。我尝试在表单中添加"数据"事件,但结果相同。
基本上,如何将文件上传到我的服务器并将进度报告给用户。
request
使用node-form-data
来处理表单上传。据我所知,node-form-data
没有提供任何进度信息,这意味着我们需要找到一个聪明的解决方法。
node-form-data
使用 combined-stream
,看起来像实现了正确的暂停/恢复算法。这意味着,即使node-form-data
不支持 Node 0.10 流,如果请求太慢,它仍将暂停其输入流(文件流)。在我看来,查看文件流发送的字节数是 POST 请求状态的足够近似值。
也许尝试使用超级代理而不是request
?不确定它是否以不同的方式做事,但值得一试。