var http = require('http');
var fs = require('fs')
var formidable = require('formidable');
var util = require('util');
var io = require('socket.io');
var progress = {finish: false};
var server = http.createServer(function(req, res) {
switch (req.method) {
case 'GET':
show(req, res);
break;
case 'POST':
upload(req, res);
break;
}
});
function socketListen() {
io.listen(server).sockets.on('connection', function(sock) {
console.log('connection');
setInterval(function(){
// sock.emit("progress", 'percent2');
if (progress.finish == false && progress.percent != undefined) {
// sock.emit("progress", 'percent1');
console.log(progress.percent);
sock.emit("progress", progress.percent);
if (progress.percent == 100) {
progress.finish = false;
}
}
}, 500);
sock.on('disconnect', function() {
console.log("exit");
});
});
}
function show(req, res) {
var html = ''
+ '<form method="post" action="/" enctype="multipart/form-data">'
+ '<p><input type="text" name="name"/></p>'
+ '<p><input type="file" name="file"/></p>'
+ '<p><input type="submit" value="Upload"/></p>'
+ '</form>';
res.setHeader('Content-Type', 'text/html');
res.setHeader('Content-Length', Buffer.byteLength(html));
res.end(html);
}
function upload(req, res) {
if (!isFormData(req)) {
res.statusCode = 400;
res.end('Bad Request: expecting multipart/form-data');
return;
}
var html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>'
+ '<p>上传文件中: </p>'
+ '<div id="p1"></div>'
+ '<script src="/socket.io/socket.io.js" type="text/javascript"></script>'
+ '<script>'
+ 'var socket = io.connect("http://127.0.0.1:3000");'
+ 'socket.on("progress", function(data) {document.getElementById("p1").innerHTML=data;});'
+ '</script>'
+ '</body></html>';
res.write(html);
var form = new formidable.IncomingForm();
form.uploadDir = '.';
form.parse(req, function(err, fields, files) {
fs.renameSync(files.file.path, files.file.name + '.backup');
res.end('upload complete!');
});
form.on('progress', function(bytesReceived, bytesExpected) {
var percent = Math.floor(bytesReceived / bytesExpected * 100);
progress.percent = percent;
progress.finish = false;
});
}
function isFormData(req) {
var type= req.headers['content-type'];
return 0 == type.indexOf('multipart/form-data');
}
server.listen(3000);
socketListen();
上传文件与socket.io
最新推荐文章于 2024-07-08 17:34:35 发布