我正在开发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’)永远不会触发,它会触发大文件,但不会触发文件的开头.我相信由于某种原因,它是提前发送文件,当我的功能从头开始(或在小文件的情况下,整个事情)已经发送.不过,我不知道会造成什么.
谢谢!
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。