在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()); }