2013-01-04 65 views
2

我打算使用nodejs快递上传文件。如何获取http请求文件上传的响应中止?

我看到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协议的行为,所以任何帮助表示赞赏。

回答

0

我认为你的代码应该可以工作,但不要破坏请求!只需从您的代码中删除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了解详情。 希望这会帮助你。

+0

这样的工作......但我的问题是,当文件太大... 我不想等到文件完全上传,拒绝它。 – RLeite

+0

你可以看[这里](http://stackoverflow.com/questions/1601455/check-file-input-size-with-jquery)和[这里](http://forum.jquery.com/topic/checking - 文件大小 - 上传前),但你会在IE中遇到问题。当然你也应该检查服务器上的文件大小。 –

+0

感谢您的领导;) – RLeite

相关问题