如何获得对http请求文件上传中止的响应?
Posted
技术标签:
【中文标题】如何获得对http请求文件上传中止的响应?【英文标题】:How to get response on http request file upload aborted? 【发布时间】:2012-12-19 01:54:15 【问题描述】:我将使用 nodejs 和 express 上传文件。
我看到 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 协议的一种行为,因此感谢您提供任何帮助。
【问题讨论】:
【参考方案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 了解详情。 希望这会对你有所帮助。
【讨论】:
这行得通...但我的问题是当文件太大时...我不想等到文件完全上传后再拒绝它。 您可以查看here 和here,但您在IE 中会遇到问题。当然你也应该检查服务器上的文件大小。以上是关于如何获得对http请求文件上传中止的响应?的主要内容,如果未能解决你的问题,请参考以下文章