我有一个非常简单的文件上传示例
var http = require('http');
http.createServer(function(req, res){
console.log(req.method);
if (req.method == 'GET'){
res.writeHead(200);
res.write('<html><head></head><body><form method="POST" enctype="multipart/form-data"><input type="file" id="f" name="f"><input type="submit"></body></html>')
res.end();
}else if(req.method == 'POST'){
req.pause();
res.writeHead(200);
res.end();
}else{
res.writeHead(404).end();
}
}).listen('8081');
我想要做的是暂停上传。虽然它适用于大文件,但可能在单个部分中与请求一起发送的小文件(&lt; = 100kB)不会暂停(这很好并且可以理解),而是下一个暂停对服务器的请求(即当我尝试加载页面时,它永远不会到达console.log(req.method)
部分,但是当我再次刷新它恢复正常时),这绝对不是很好。
这似乎是偶尔出现的错误,所以当我没有发现任何关于它的抱怨时,我感到很惊讶。您有什么想法/可能的解释/解决方法/修复建议?现在我检查文件的大小是否低于某个阈值,但它看起来不太安全或不太优雅。
答案 0 :(得分:1)
我认为(可能是错误的)req.pause导致底层套接字暂停。验证此声明的一种方法是在 res.writeHead(200); 中添加标题 Connection:Close ,它位于 req.pause行之后();
现在,如果每个开始工作正常(下一个请求没有暂停),您可以说底层套接字已暂停,并且正在重复用于下一个请求。