【问题标题】:How to interrupt while uploading the file in node.js?在 node.js 中上传文件时如何中断?
【发布时间】:2016-11-15 18:09:33
【问题描述】:

我在控制器中有如下代码:

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);

  });
});

如果状态==“取消”,我想中断文件上传,是这样吗 可能吗?

【问题讨论】:

  • 您是否从请求中获取状态?
  • 如果 status == "cancel" 是什么意思?
  • formData.submit(url + '/service/uploadFile/' 是做什么的?
  • 所以,如果是用户中断,我建议你从客户端中断,但是,如果你想中断基于流的上传,只需抛出一个错误!
  • 不清楚 OP 在问我们什么。

标签: node.js file interrupt form-data uploading


【解决方案1】:

如果 status == "cancel" 试试这个:

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

【讨论】:

    【解决方案2】:

    我不太了解您的代码工作方式或工作流程。这是一个很可能会起作用的通用解决方案。如果您想要更具体的解决方案,请在问题中添加更多代码。

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

    【讨论】:

      【解决方案3】:

      保存从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

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

      【讨论】:

        猜你喜欢
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 2011-08-24
        • 2022-10-07
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多