日期:2014-05-16  浏览次数:20462 次

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处理的事务,分离出去。