最近和后台交互时,需要一个功能,把用户本地的zip文件上传到后台,用于计算分析数据。本来想自己原生代码实现,奈何臣妾做不到啊,实在太难了,还是用node的form-data实现了此功能,比自己写好多了,神清气爽。
form-data地址:form-data 用于创建可读"multipart/form-data"
流的库。可用于将表单和文件上载提交到其他Web应用程序。
用法:
1.安装
npm install --save form-data
2.引入form-data和fs,fs模块用于对系统文件及目录进行读写操作
const fs = require('fs');
const nodeFormData = require('form-data');
3. 上传文件
function postzip() {
return new Promise((response, rej) => {
const http = require('http');
var form = new nodeFormData();
form.append('上传文件参数名', fs.createReadStream("本地zip地址"));
var headers = form.getHeaders();
var request = http.request({
method: 'post',
host: '域名',
port:'端口',
path: '接口地址',
headers: form.getHeaders()
}, function(res) {
// 数据
let dataBuffer = "";
res.on("data",function(chunk) {
dataBuffer += chunk;
})
res.on("end",function() {
let data = JSON.parse(dataBuffer);
console.log(data)
});
res.on("error",function(e){
console.log(e);
});
}).on('error',function(e) {
console.log("上传数据失败"+e);
});
form.pipe(request);
});
}
这里需要说明的是如果不设置端口port,那么请求的时候node会自动设置端口为 80,地址和域名必须分开写,如果都写到path中是不起作用的。