看来这应该是一个相当简单的问题,但是我很难确定如何解决它。
我正在使用Node.js + Express构建一个Web应用程序,并且发现表达暴露的connect
BodyParser在大多数情况下非常有用。但是,我想对多部分表单数据POSTS进行更细粒度的访问-
我需要将输入流通过管道传输到另一台服务器,并且希望避免先下载整个文件。
但是,由于我使用的是Express BodyParser,因此所有文件上传都将自动解析并使用“
request.files”上传并可用,然后再使用我的任何功能。
有没有一种方法可以禁用BodyParser的多部分formdata帖子,而不同时禁用其他所有功能?
当您键入时app.use(express.bodyParser())
,几乎每个请求都将通过bodyParser
函数(将执行哪个请求取决于Content- Type
标头)。
默认情况下,支持3个标头(AFAIR)。您可以确定来源。您可以使用以下方法来(重新)定义的处理程序Content-Type
:
var express = require('express');
var bodyParser = express.bodyParser;
// redefine handler for Content-Type: multipart/form-data
bodyParser.parse('multipart/form-data') = function(req, options, next) {
// parse request body your way; example of such action:
// https://github.com/senchalabs/connect/blob/master/lib/middleware/multipart.js
// for your needs it will probably be this:
next();
}
更新。
Express 3发生了变化,因此我正在共享工作项目中的更新代码(应在 之前app.use
编辑): __express.bodyParser()
var connectUtils = require('express/node_modules/connect/lib/utils');
/**
* Parses body and puts it to `request.rawBody`.
* @param {Array|String} contentTypes Value(s) of Content-Type header for which
parser will be applied.
* @return {Function} Express Middleware
*/
module.exports = function(contentTypes) {
contentTypes = Array.isArray(contentTypes) ? contentTypes
: [contentTypes];
return function (req, res, next) {
if (req._body)
return next();
req.body = req.body || {};
if (!connectUtils.hasBody(req))
return next();
if (-1 === contentTypes.indexOf(req.header('content-type')))
return next();
req.setEncoding('utf8'); // Reconsider this line!
req._body = true; // Mark as parsed for other body parsers.
req.rawBody = '';
req.on('data', function (chunk) {
req.rawBody += chunk;
});
req.on('end', next);
};
};
还有一些关于原始问题的伪代码:
function disableParserForContentType(req, res, next) {
if (req.contentType in options.contentTypes) {
req._body = true;
next();
}
}
这似乎应该是一个相当简单的问题,但我真的很难想出如何解决它。 我正在使用Node.jsExpress构建一个Web应用程序,我发现在大多数情况下,Express公开的连接BodyParser非常有用。然而,我希望对多部分表单数据POSTS有更细粒度的访问——我需要将输入流管道到另一台服务器,并且希望避免首先下载整个文件。 然而,因为我正在使用快速身体解析器,所以所有文件上传都会自动解析,并在它们到
问题内容: 这是我使用拖放功能动态生成的HTML。 这是我的JavaScript代码: 问题答案: 为了正确使用表格数据,您需要执行2个步骤。 准备工作 您可以将整个表单交给FormData()进行处理 或为FormData()指定确切的数据 发送表格 带有jquery的Ajax请求将如下所示: 之后,它将发送ajax请求,就像您使用 更新:如果没有in选项,该请求将无法工作,因为所有文件都必须通
问题内容: 这是我使用拖放功能动态生成的html。 这是我的js代码… 问题答案: 为了正确使用表格数据,您需要执行2个步骤。 准备工作 您可以将整个表单交给FormData()进行处理 或为FormData()指定确切的数据 发送表格 带有jquery的Ajax请求将如下所示: 之后,它将发送ajax请求,就像您提交常规表格一样 更新:如果没有in选项,该请求将无法工作,因为所有文件都必须通过P
问题内容: 为了将二进制文件上传到URL,建议使用本指南。但是,该文件不在目录中,而是存储在MySql db的BLOB字段中。BLOB字段在JPA中映射为属性: 我以这种方式稍微修改了指南中的代码: 我没有使用分块流。使用的标头是: 主机正确接收了所有标头。它还接收上载的文件,但不幸的是,它抱怨该文件不可读,并且断言所接收文件的大小比我的代码输出的大小大37个字节。 我对流,连接和byte []的
我正在使用th:disabled,它是禁用按钮,但仍可点击,这是我迄今为止所做的百里香代码。我想禁用文件上传按钮,当用户完成了申请的最终提交。为此,我检查以下条件:th:disabled="${lst.finalSubmit!=null} " 这是截图:(https://prnt.sc/10cny2t)
我正在尝试使用多部分实体方法上传文件。但它失败,错误说{“错误”:“文件参数值'无'无效”} 我的代码是: File File = new File(" C:/Users/SST-06/Desktop/new . txt "); 我的实体文件包含所有提到的参数。 -hkYO-pblk 0 uqlxjtvklrbkosxz 7 mye-8 wbvbvanx Content-Disposition:f