NodeJS Web应用程序file upload文件开始

我正在从事一个涉及file upload的NodeJS项目。 上传在客户端完成,代码如下:

$('#file-upload').bind('change focus click', function() { var file = jQuery(this)[0].files[0]; if (file && file.fileName) { var xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', onProgressHandler, false); xhr.upload.addEventListener('load', transferComplete, false); xhr.open('POST', '/upload', true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('X-File-Name', encodeURIComponent(file.fileName)); xhr.setRequestHeader('Content-Type', 'application/octet-stream'); xhr.send(file); function onProgressHandler(evt) { var percentage = event.loaded/event.total*100; console.log(percentage); } function transferComplete(evt) { console.log('Done'); } } }); 

而在服务器端,我使用:

 app.post('/upload', function(req, res, next) { if(req.xhr) { console.log('Uploading...'); var fName = req.header('x-file-name'); var fSize = req.header('x-file-size'); var fType = req.header('x-file-type'); var ws = fs.createWriteStream('./'+fName) req.on('data', function(data) { console.log('DATA'); ws.write(data); }); req.on('end', function() { console.log('All Done!!!!'); }); } }); 

这个代码确实可以独立工作,但是当与我的大型项目的其他部分结合使用时,似乎会破坏大文件的开始,并忽略小文件。 如果我上传一个小文件,console.log('DATA')永远不会触发,并且会触发大文件,而不是文件的开头。 我相信,由于某种原因,它是提前发送文件,并在我的函数开始(或在一个小文件的情况下,整个事情)已经发送的时间。 不过,我不知道这是什么原因造成的。

谢谢!

Solutions Collecting From Web of "NodeJS Web应用程序file upload文件开始"

我想到了。 在我的路由被定义和运行的实际file upload代码之间有太多的逻辑,因为它没有准备好监听文件。

我有这个完全相同的问题。 令我困扰的是,在请求和on('data')事件之间有太多的逻辑是问题。 我使用本地服务器进行testing,请求开始和注册数据事件之间的逻辑量是微不足道的,但事实是我不需要通过互联网来上传这个问题,那更糟?你还在遇到这个问题吗?