node.js实现带进度条的多文件上传

2020-06-17 06:08:23易采站长站整理

// 监控上传进度回调
if (option.onProgress instanceof Function) {
option.onProgress(event)
}
}
}

// 自定义头部
const headers = option.headers || {}
for (var item in headers) {
xhr.setRequestHeader(item, headers[item])
}

xhr.send(option.data)
}

// 测试接口
http({
type: 'POST',
url: '/test',
data: JSON.stringify({
name: 'yolo'
}),
onSuccess: function (data) {
console.log(data)
},
onError: function (err) {
console.log(err)
}
})
document.getElementById('file').onchange = function () {
var fileList = this.files, formData = new FormData();
Array.prototype.forEach.call(fileList, function (file) {
formData.append(file.name, file)
})
// 当上传的数据为 file 类型时,请求的格式类型自动会变为 multipart/form-data, 如果头部格式有特定需求,在我的 http 函数中传入 headers<Object> 即可,大家可自己查看,我这里没有什么特殊处理所以就不传了
http({
type: 'POST',
url: '/upload',
data: formData,
onProgress: function (event) {
console.log(event.percent)
document.querySelector('.progress span').style.width = event.percent + '%';
},
onSuccess: function (data) {
console.log('上传成功')
},
onError: function (err) {
alert(err)
}
})
}
</script>
</body>
</html>

后端所用的一些东西我放在这

express中间件-multer
express 4.x 文档


// 后端(node.js) upload.js
var express = require('express');
var path = require('path');
var fs = require('fs');
var app = express();
var bodyParser = require('body-parser'); // 过滤请求头部相应格式的body
var multer = require('multer');
var chalk = require('chalk'); // 只是一个 cli 界面字体颜色包而已
var log = console.log.bind(console);

app.use(express.static('static'));
// 接受 application/json 格式的过滤器
var jsonParser = bodyParser.json()
// 接受 application/x-www-form-urlencoded 格式的过滤器
var urlencodedParser = bodyParser.urlencoded({ extended: false })
// 接受 text/html 格式的过滤器
var textParser = bodyParser.text()

// 自定义 multer 的 diskStorage 的存储目录与文件名
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'view')
},
filename: function (req, file, cb) {
cb(null, file.fieldname)
}
})

var upload = multer({ storage: storage })

// 页面渲染
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'view/upload.html'));