上传文件时,怎样返回上传进度给前台?
我通过formidable中间件,获取文件上传进度,怎样返回给前台呢?
form.on('progress', function(bytesReceived, bytesExpected) {
console.log(`bytesReceived:${Math.round(bytesReceived/bytesExpected*100)}`)
});
4 回复
前端也可以通过progress 事件监听 一般上传文件的插件会有
如果是前端的话,其实不用后台返回进度,可以使用h5中 XMLHttpRequest对象的upload属性,upload能监听的事件有 onloadstart 获取开始 onprogress 数据传输进行中 onabort 获取操作终止 onerror 获取失败 onload 获取成功 ontimeout 获取操作因用户指定的延迟时间内未完成 onloadend 获取完成(不能成功与否)) 下面贴段代码
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", function showProgress(event){
//已经上传的字节数
var loaded=event.loaded;
//文件总的字节数
var total=event.total;
//上传进度
var percent = (loaded / total) * 100 + "%";
})
//上传文件要发送post的ajax请求
xhr.open("POST", "/upload");
xhr.send(文件数据);
@CodeofGame谢谢,提供了一种方法,你说的这种通过XMLHttpRequest上传图片,然后监听实现进度显示。但是我上传完之后还要返回数据,这种的怎样接受?
//服务端代码
var http = require("http");
var formidable = require("formidable");
var path=require("path");
http.createServer(function (req, res) {
if (req.method == "POST" && req.url == "upload") {
var form = new formidable.IncomingForm();
//文件的上传路径
form.uploadDir =path.join(process.cwd(),"public/images");
//编码格式
form.encoding = 'utf-8';
//是否保留文件扩展名
form.keepExtensions = true;
//处理post过来的数据
form.parse(req);
//监听文件上传事件
form.on('file', function (name, file) {
});
//监听文件上传进度
form.on('progress', function (bytesReceived, bytesExpected) {
var percent=bytesReceived/bytesExpected*100+"%";
});
//监听文件上传完毕事件
form.on('end', function () {
res.end("传入返回客户端的数据");
});
}
})