1.用formData对象来保存二进制文件数据
2.将formData对象通过ajax上传给服务器
3.实时监听上传进度绘制进度条
4.将图片显示在页面中(服务器返回图片路径,客户端读取路径并显示图片)
代码中没有实现图片显示
前端代码
<div>
<div class="form-group">
<label>请选择文件</label>
<input type="file" id="file" />
</div>
<div class="progress" style=" 300px; height: 10px;background-color: #0000FE;">
<div class="progress-bar" style="height:100%; 0%; background-color: #00FF00;">0%</div>
</div>
</div>
<script>
// 获取文件选择空间
var file = document.getElementById("file")
// 获取进度条元素
var pro = document.querySelector('.progress-bar')
file.onchange = function(){
// 创建空的formData对象
var formData = new FormData();
// 将用户选择的文件追加到formData表单对象中
formData.append('arrtName',file.files[0])
// console.log(formData)
// 创建ajax对象
var xhr = new XMLHttpRequest();
// 对ajax对象进行配置
xhr.open('post','http://localhost:3000/upload')
// 在文件上传过程中持续触发
xhr.upload.onprogress = function(ev){
// ev.loaded 文件已经上传了多少
// ev.total 上传文件的总大小
var result = (ev.loaded/ev.total)*100 +'%'
pro.style.width = result;
pro.innerHTML = result;
}
xhr.send(formData)
// 监听响应
xhr.onload = function(){
if(xhr.status == 200){
console.log(xhr.responseText)
}
}
}
</script>
服务器端代码
const express = require('express');
const path = require('path');
// const bodyParser = require('body-parser')
const formidable = require('formidable')
const app = express()
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://127.0.0.1:8848");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header("X-Powered-By",' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8");
res.header("Access-Control-Allow-Credentials",true);
next();
});
app.post('/upload',(req,res)=>{
// 创建formidable表单解析对象
const form = new formidable.IncomingForm();
// 设置客户端上传文件的存储路径
form.uploadDir = path.join(__dirname,'uoload')
console.log(path.join(__dirname,'upload'))
// 保留文件后缀
form.keepExtensions = true;
//解析formData对象
form.parse(req,(err,fields,files)=>{
res.send(files.arrtName.path)
})
})
app.listen(3000);
console.log('app服务器启动成功')