@discordjs/form-data

中文文档
3.0.1发布于 2020/04/16MITTypeScriptCommonJS近 30 天下载 17.8万

一个创建可读"多部分/形式-数据"流的库. 可用于提交表格和文件上传到其他网络应用程序.

此软件包已被标记为弃用

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

中文使用文档
文档目录8 节
  1. 安装
  2. 使用量
  3. 自定义选项
  4. 备选提交方法
  5. 方法
  6. 与其他图书馆合并
  7. 页:1
  8. 许可证

窗体数据 NPM Module Join the chat at https://gitter.im/form-data/form-data

创建可读图书馆 "multipart/form-data" 流经. 可用于提交表格和文件上传到其他网络应用程序.

此库的API 灵感来自 XMLHttp 请求-2 FormData 接口。 。 。 .

Linux Build MacOS Build Windows Build

Coverage Status Dependency Status

安装

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) 字符串 字段, (中文(简体) ), 混合 价值 [, 混合 选项[ ]

在表单中附加数据。 您可以提交任何格式(字符串、整数、布尔、缓冲等)。 然而,阵列不支持,需要被用户变成字符串.

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.x FormData 已放弃对 [email protected]。 。 。 .
  • 开始版本 3.x FormData 已放弃对 [email protected]。 。 。 .

许可证

表格数据在 麻省理工学院 执照.

版本与发布记录

@discordjs/form-data 共发布 1 个版本,首次发布于 2020/04/16;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.0.1latest2020/04/166 年前

关于 @discordjs/form-data 的常见问题

@discordjs/form-data 是什么?

一个创建可读"多部分/形式-数据"流的库. 可用于提交表格和文件上传到其他网络应用程序.注意:该包已被作者标记为弃用——Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

如何安装 @discordjs/form-data?

在项目目录运行 npm install @discordjs/form-data,或使用 pnpm add / yarn add / bun add。

@discordjs/form-data 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@discordjs/form-data 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@discordjs/form-data 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 6。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@discordjs/form-data 可以商用吗?

@discordjs/form-data 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@discordjs/form-data 的下载量有多少?

根据 npm 官方下载统计,@discordjs/form-data 在 2026/10/13 – 2026/11/11 这 30 天内被下载 177,902 次,日均约 5,930 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@discordjs/form-data 还在维护吗?

最新版本 3.0.1 发布于 2020/04/16(6 年前);至今共发布 1 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/04/16。作者已将其标记为弃用,新项目建议寻找替代方案。