【发布时间】:2014-04-15 16:21:51
【问题描述】:
我想知道是否可以让 Busboy 分别解析字段和文件。 (我已经删除了bodyParser,因为你可以很容易地用临时文件填充硬盘。)
例如 - 解析器发布字段的中间件(用于所有 POST 请求)
if (req.method === 'POST') {
var form = new busboy({ headers: req.headers, limit: { files: 0 } });
form.on('field', function (fieldname, val, valTruncated, keyTruncated) {
req.params.body[fieldname] = val;
});
form.on('finish', function () {
next();
});
return req.pipe(form);
} else { next(); }
然后在上传页面上使用以下内容,它使用 Busboy 来获取发布的文件。
app.post('/fm/file/upload/:folder', function (req, res) {
var isFrame = helpers.toBool(req.param('frame'), false),
uploadService = fmUploadService.create(),
userId = res.locals.info.User.Id,
folder = helpers.toInt(req.param('folder', 0));
uploadService.processUploads(userId, folder, req, res, function (uploadError, allowedAccess, files) {
if (uploadError) {
if (req.xhr) {
res.status(500);
res.json(uploadError);
} else {
res.render('filemanager/file_upload.jade', { actionUrl: '/fm/file/upload/' + folder, tempData: files, isFrame: isFrame, err: uploadError });
}
return;
}
else if (req.xhr) {
res.status(200);
res.json(files);
return;
}
res.render('filemanager/file_upload.jade', { actionUrl: '/fm/file/upload/' + folder, tempData: files, isFrame: isFrame, err: null });
});
});
目前文件将始终为 0,因为 Busboy 已在中间件中运行。
【问题讨论】:
-
您找到解决方案了吗?我有同样的用例,想在我的模型中解析文件,但是在到达路由之前将字段作为中间件来填充 req.body。
-
我正在为此寻找解决方案。有更新吗?
-
我不确定我是否正确理解了这个问题,但在 Express 4 中,Multer 单独处理文件上传。
标签: javascript node.js express upload