【问题标题】:How to get response on http request file upload aborted?如何获得对http请求文件上传中止的响应?
【发布时间】:2012-12-19 01:54:15
【问题描述】:

我将使用 nodejsexpress 上传文件。

我看到 bodyParser 完成了工作......

app.use(express.bodyParser({"limit": '2mb'}));

但如果我想限制请求的大小,我发现它不会以某种方式取消上传。客户端不断发送数据。

所以我写了这个中间件:

app.use(function (err, req, res, next) {

   if(err.status == 413){
       req.destroy();
       return res.json({
            "status": 413,
            "message": err
       },413);
   }else
       next(err);
});

有效,取消上传,但客户端没有收到(或忽略)响应!

我认为这可能是 http 协议的一种行为,因此感谢您提供任何帮助。

【问题讨论】:

    标签: node.js http express formidable


    【解决方案1】:

    我认为您的代码应该可以工作,但不要破坏请求!只需从您的代码中删除 req.destroy(); 行。 为了不使用中间件,您也可以尝试这样的事情(它在我这边工作):

    express = require 'express'
    app = express()
    swig = require 'swig'
    cons = require 'consolidate'
    swig.init {
      root: __dirname + '/views'
      allowErrors: true
    }
    app.set 'views', __dirname + '/views'
    app.set 'view options', {layout: false}
    app.engine '.html', cons.swig
    app.set 'view engine', 'html'
    
    # set upload dir
    app.use express.bodyParser {uploadDir: './upload'}
    
    app.get '/', (req, res) ->
      res.render 'index.html', {}
    
    app.post '/file-upload', (req, res) ->
      # you can get some info about files here (size, path, name, type)
      console.log req.files
      # check that size is good
      if req.files.thumbnail.size > 200
        res.send 413
      else
        res.send 'Uploaded!'
    
    console.log 'listen port 3000'
    app.listen 3000
    

    形式上:

    <form method="post" enctype="multipart/form-data" action="/file-upload">
    <input type="file" name="thumbnail">
    <input type="submit">
    </form>
    

    Look here 了解详情。 希望这会对你有所帮助。

    【讨论】:

    • 这行得通...但我的问题是当文件太大时...我不想等到文件完全上传后再拒绝它。
    • 您可以查看herehere,但您在IE 中会遇到问题。当然你也应该检查服务器上的文件大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2020-10-27
    相关资源
    最近更新 更多