node.js 上传文件时如何释放掉出错的文件资源
大家好,当我上传时,如果出错,如何释放掉出错的文件呢?
upload:function(req, res){
try{
req.form.on('part', function (part) {
dealwithfile(part.byteCount, part);
});
}catch(err){
//这里如何释放掉客户端上传的文件}
}
如果不做任何出错处理,这里会把系统卡住。 Client会拿不到response。
我试了几种办法都不行:
1 request.connection.destroy();
这个关掉connection的话,我的response消息也发送不到client端了。因为request和response占用的同一个connection。
2 try { throw new Error("Stopping file upload..."); } catch (e) { res.end(e.toString()); }
制造异常,终止文件上传,但是实验证明client还是拿不到服务端的response。程序依然被卡住。
3 part.resume();
这个方法虽然行,但是会消耗网络资源和服务器资源,因为client要把所有的文件全部上传到服务器端。如果文件一大,消耗网络和服务器资源就相当是个大问题了。
目标最好是让client端取消或者不要上传文件,并且服务端可以正常发送返回response信息给客户端。
请问谁有更好的办法解决这个问题吗?
------解决方案--------------------上传下载最好不要在nodejs上完成,可以考虑用nginx做反向代理来完成文件的下载和上传。
竟可能让nodejs负责客户请求,业务处理方面的事务。
高计算密集和高io处理的事务,分离出去。