我正在使用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
})
我的问题是上传时的“数据”事件不是上传进度,而是来自磁盘进度的读取文件。我尝试在表单中添加“数据”事件,但结果相同。
基本上我如何将文件上传到我的服务器并将进度报告给用户。
答案 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
?不确定它是以不同的方式做事,但值得一试。