在node.js中上传文件时如何中断?

我有一个如下所示的控制器中的代码:

BASE.APP.post('/uploadFile/:request/:file', function(req, res, next) { var url = req.usersession.webipAddress; var path = 'uploads/' + req.params.file; var formData = new BASE.FormData(); formData.append('fileNameUnique', req.params.file); formData.append('file', BASE.FS.createReadStream(path)); // console.log(formData); formData.submit(url + '/service/uploadFile/', function(err, response) { // console.log(response.statusCode); res.send(response.statusCode); }); }); 

我想中断file upload,如果状态==“取消”,这是可能的吗?

保存从formData.submit返回的值,并将其作为一个句柄调用request.abort

例如

 BASE.APP.post('/uploadFile/:request/:file', function(req, res, next) { var formData = new BASE.FormData(); // ... var formSubmitRequest = formData.submit(url + '/service/uploadFile/', function(err, response) { res.send(response.statusCode); }); statusChanger.on('status-change', function(status) { if (status === "cancel" && formSubmitRequest) { formSubmitRequest.abort(); res.send(524); } }); } 

https://github.com/form-data/form-data

对于更高级的请求操作,submit()方法返回http.ClientRequest对象

https://nodejs.org/api/http.html#http_request_abort

request.abort()#

添加到:v0.3.8

将请求标记为中止。 调用这个会导致响应中的剩余数据被丢弃,套接字被销毁。

如果状态==“取消”试试这个:

 req.pause() res.status = 400; res.end('Upload cancelled'); 

我不太了解代码的工作方式或工作stream程。 这是一个通用的解决scheme,最有可能的工作。 在问题中添加更多的代码,如果你想要一个更具体的soln。

 try { if (status === 'cancel') { throw new Error("Stopping file upload..."); } } catch (e) { res.end("the upload was cancelled because of error: " + e.toString()); }