窗体数据

创建可读图书馆 "multipart/form-data" 流经. 可用于提交表格和文件上传到其他网络应用程序.
此库的API 灵感来自 XMLHttp 请求-2 FormData 接口。 。 。 .
安装
npm install --save form-data
使用量
在这个例子中,我们正在构建一个包含有字符串的三个字段的表格, 缓冲器和文件流.
var FormData = require('form-data');
var fs = require('fs');
var form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
您也可以使用 http- response 流 :
var FormData = require('form-data');
var http = require('http');
var form = new FormData();
http.request('http://nodejs.org/images/logo.png', function(response) {
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_logo', response);
});
或说@mikeal's 请求 流线 :
var FormData = require('form-data');
var request = require('request');
var form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_logo', request('http://nodejs.org/images/logo.png'));
为了向网络应用程序提交此表, 请调用 submit(url, [callback]) 方法 :
form.submit('http://example.org/', function(err, res) {
// res – response object (http.IncomingMessage) //
res.resume();
});
对于更先进的请求操纵 submit() 方法返回 http.ClientRequest 对象,或者可以从备选提交方法中选择.
自定义选项
您可以提供自定义选项, 例如 maxDataSize数字 :
var FormData = require('form-data');
var form = new FormData({ maxDataSize: 20971520 });
form.append('my_field', 'my value');
form.append('my_buffer', /* something big */);
现有备选方案清单可见于 组合-流
备选提交方法
您可以使用节点的 http 客户端接口 :
var http = require('http');
var request = http.request({
method: 'post',
host: 'example.org',
path: '/upload',
headers: form.getHeaders()
});
form.pipe(request);
request.on('response', function(res) {
console.log(res.statusCode);
});
或者如果你更喜欢 'Content-Length' 要为您设定的标题 :
form.submit('example.org/upload', function(err, res) {
console.log(res.statusCode);
});
要使用自定义标题和预知长度的部件 :
var CRLF = '\r\n';
var form = new FormData();
var options = {
header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,
knownLength: 1
};
form.append('my_buffer', buffer, options);
form.submit('http://example.com/', function(err, res) {
if (err) throw err;
console.log('Done');
});
表格数据可以识别并从常见类型的流中获取所有所需信息(fs.readStream, (中文(简体) ), http.response 财务报告和审定财务报表 mikeal's request),对于其他一些类型的流,您需要手动提供"文件"相关信息:
someModule.stream(function(err, stdout, stderr) {
if (err) throw err;
var form = new FormData();
form.append('file', stdout, {
filename: 'unicycle.jpg', // ... or:
filepath: 'photos/toys/unicycle.jpg',
contentType: 'image/jpeg',
knownLength: 19806
});
form.submit('http://example.com/', function(err, res) {
if (err) throw err;
console.log('Done');
});
});
这个 filepath 属性覆盖 filename 并可能包含一个相对路径。 这通常用于上传 目录中的多个文件。 。 。 .
对于边缘大小写,如 POST 请求使用查询字符串的 URL 或者通过 HTTP 认证证书, 对象可以传递到 form.submit() 作为第一个参数 :
form.submit({
host: 'example.com',
path: '/probably.php?extra=params',
auth: 'username:password'
}, function(err, res) {
console.log(res.statusCode);
});
如果您还需要发送带有 POST 请求的自定义 HTTP 信头, 您可以使用 headers 第一个参数中的密钥 form.submit()数字 :
form.submit({
host: 'example.com',
path: '/surelynot.php',
headers: {'x-test-header': 'test-header-value'}
}, function(err, res) {
console.log(res.statusCode);
});
方法
- 虚拟 附录( e) 字符串 字段, (中文(简体) ), 混合 价值 [, 混合 选项[ ]。 。 。 .
- 页眉 获取标题( E)页眉 用户页眉[ ]
- 字符串 获取边界( B)
- 缓冲 获取缓冲 ()
- 整数 获取 LengthSync ()
- 整数 获取 Length () 函数 回调 (中文(简体) )
- 布尔 已经知道Length( )
- 请求 提交( e) 段落, (中文(简体) ), 函数 回调 (中文(简体) )
- 字符串 转到 String ()
虚拟 附录( e) 字符串 字段, (中文(简体) ), 混合 价值 [, 混合 选项[ ]
在表单中附加数据。 您可以提交任何格式(字符串、整数、布尔、缓冲等)。 然而,阵列不支持,需要被用户变成字符串.
var form = new FormData();
form.append( 'my_string', 'my value' );
form.append( 'my_integer', 1 );
form.append( 'my_boolean', true );
form.append( 'my_buffer', new Buffer(10) );
form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) )
您可以为选项或对象提供字符串 .
// Set filename by providing a string for options
form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' );
// provide an object.
form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} );
页眉 获取标题( E)页眉 用户页眉[ ]
这种方法添加了正确的 content-type 给定数组的页眉 userHeaders。 。 。 .
字符串 获取边界( B)
返回窗体Data的边界。 边界由26个组成 - 随后是24个数字
例如:
--------------------------515890814546601021194782
注:边界必须是独特的,可能不出现在数据中.
缓冲 获取缓冲 ()
返回完整的窗体数据请求包, 作为缓冲器 。 您可以在 Axios 中插入此缓冲以发送多段数据 .
var form = new FormData();
form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) );
form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') );
axios.post( 'https://example.com/path/to/api',
form.getBuffer(),
form.getHeaders()
)
说明: 由于输出为缓冲类型,只能附加被缓冲接受的类型: 字符串、 缓冲、 线程、 线程或类似线程的对象。例如,ReadStream将会导致错误.
整数 获取 LengthSync ()
与 getLength 但是同步的.
注:获取 Length 同步 没有 计算流长.
整数 获取 Length () 函数 回调 (中文(简体) )
返回 Content-Length 亚眠。 回调用于处理错误, 一旦长度被计算出来继续
this.getLength(function(err, length) {
if (err) {
this._error(err);
return;
}
// add content length
request.setHeader('Content-Length', length);
...
}.bind(this));
布尔 已经知道Length( )
检查添加值的长度是否为已知 .
请求 提交( e) 段落, (中文(简体) ), 函数 回调 (中文(简体) )
将表格提交网络应用程序.
var form = new FormData();
form.append( 'my_string', 'Hello World' );
form.submit( 'http://example.com/', function(err, res) {
// res – response object (http.IncomingMessage) //
res.resume();
} );
字符串 转到 String ()
返回窗体数据为字符串。 如果您正在发送文件或缓冲器, 请不要使用此项 getBuffer() 换句话说.
与其他图书馆合并
请求
使用表格提交 请求数字 :
var formData = {
my_field: 'my_value',
my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
};
request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
详情见 请求读取。 。 。 .
节点比对
您也可以使用 节点比对数字 :
var form = new FormData();
form.append('a', 1);
fetch('http://example.com', { method: 'POST', body: form })
.then(function(res) {
return res.json();
}).then(function(json) {
console.log(json);
});
轴
在节点中,您可以使用 轴数字 :
const form = new FormData();
const stream = fs.createReadStream(PATH_TO_FILE);
form.append('image', stream);
// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`
const formHeaders = form.getHeaders();
axios.post('http://example.com', form, {
headers: {
...formHeaders,
},
})
.then(response => response)
.catch(error => error)
页:1
getLengthSync()方法 DNSN 不计算流长, 使用knownLength选项作为工作.getLength(cb)如果无法计算流长, 将会将错误作为调回的第一个参数( 例如, 使用自定义流 w/ o 发送)knownLength) (中文(简体) ).sbumit将不添加content-length如果形式长度未知或无法计算.- 开始版本
2.xFormData 已放弃对[email protected]。 。 。 . - 开始版本
3.xFormData 已放弃对[email protected]。 。 。 .
许可证
表格数据在 麻省理工学院 执照.