在前端开发中,有时候需要上传一个带文件的表单,包括文本字段和文件字段。这时候我们需要使用 Content-Type: multipart/form-data
格式来提交数据。在提交数据前,需要将数据组装成 multipart/form-data
格式,以便服务器端能够正确解析。
这个过程需要用到一个名叫 mime-multipart-stream
的 npm 包。本篇文章将详细地介绍这个包的使用方法,以及给出详细代码示例。
安装
在开始之前,我们需要先安装 mime-multipart-stream
包。可以使用 npm 来安装:
npm install mime-multipart-stream --save
使用说明
使用 mime-multipart-stream
包的步骤如下:
- 创建一个
MimeMultipartStream
对象 - 添加表单的文本字段和文件字段到这个对象中
- 生成multipart格式的表单数据
创建 MimeMultipartStream 对象
创建 MimeMultipartStream
对象很简单,只需要一个调用构造函数就可以了。
const { MimeMultipartStream } = require("mime-multipart-stream"); const boundary = "----XXX"; // 表示数据分割线 const mimeStream = new MimeMultipartStream(boundary);
这里我们指定表单的分隔符是 '----XXX'
。
添加表单字段
接下来我们需要在 mimeStream
中添加表单字段,这里分为文本字段和文件字段。
添加文本字段
添加文本字段需要用到 addPart
函数,函数的参数是一个对象,包括以下属性:
name
: 字段名称value
: 字段值type
: 字段类型,这里我们默认用text/plain
options
: 其它选项,这里我们默认为空对象{}
const textPart = { name: "username", value: "lwy", type: "text/plain", options: {}, }; mimeStream.addPart(textPart);
添加文件字段
添加文件字段和添加文本字段类似,只是需要多加一个属性 path
,表示文件所在的路径。
const filePart = { name: "avatar", // 上传的字段名 path: "/path/to/file", // 文件路径 type: "image/png", // 文件类型 options: {}, // 其它选项 }; mimeStream.addPart(filePart);
这里我们假设上传一个 PNG 格式的图片,字段名是 avatar
。
生成 multipart/form-data 格式的表单数据
到这一步,我们已经将表单字段添加到了 mimeStream
中,接下来我们需要将这些字段拼接成 multipart/form-data
格式的表单数据。
生成 multipart 数据有两种方法:用 pipe()
方法将数据写入可写流(例如 http.ClientRequest
或文件),或者将数据存储在 buffer 中。
通过可写流写入数据
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------- - - --------- -------------- ----- ---- ----- ---------- ------- ------- -------- - --------------- --------------------- ---------------------- -- -- ----- --- - ---------------------- ----- -- - ------------------------ -------------------- -------------- --- -- - ------------------------ --- --- ---------------------
这里我们用 https
的模块将表单数据上传到 example.com
的 /upload
接口上。
存储在 buffer 中
const FormData = require("form-data"); const form = new FormData(); mimeStream.pipe(form); form.submit("http://example.com/upload", (err, res) => { console.log(res.statusCode); });
示例代码
-- -------------------- ---- ------- ----- - ------------------- - - --------------------------------- ----- ----- - ----------------- ----- -------- - ---------- -- ---- ----- ---------- - --- ------------------------------ -- ---- -------------------- ----- ----------- ------ ------ ----- ------------- -------- --- --- -------------------- ----- --------- ----- -------------------- ----- ------------ -------- --- --- -- --------- ----- ------- - - --------- -------------- ----- ---- ----- ---------- ------- ------- -------- - --------------- --------------------- ---------------------- -- -- ----- --- - ---------------------- ----- -- - ------------------------ -------------------- -------------- --- -- - ------------------------ --- --- ---------------------
总结
本篇文章详细介绍了前端开发中使用的 mime-multipart-stream
npm 包的使用方法,以及给出了详细的代码示例。mime-multipart-stream
包很实用,经常应用于提交表单数据,应该掌握并使用常见。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066f481d8e776d08041149