socket.io-stream으로 파일 전송하기
클라이언트는 브라우저, 서버는 nodejs로 가정.
업데이트 진행 과정을 확인할 수 있도록 만들었다.
브라우저에서는 아래와 같은 코드로 작업을 하면 된다. 스트림으로 보낼 파일을 지정하고, 해당 서버로 소켓 연결해서 보낸다. 'data' 메세지를 통해 현재 업데이트된 사이즈를 확인할 수 있다.
var fn =$("input[type=file]")[0].files[0]; // input 폼을 이용해서 지정된 파일 확인
var AllSize = fn.size; // 진행 사항을 체크하기 위한 파일 전체 사이즈
var UploadedSize = 0; // 현재 업로드된 용량
var socket = io.connect('localhost:8765');
var stream = ss.createStream();
ss(socket).emit('upload', stream, );
var blobstream = ss.createBlobReadStream(fn);
blobstream.on('data',function(chunk){
UploadedSize += chunk.length;
console.log(' updated >> ' + UploadedSize + '/' + AllSize );
});
blobstream.pipe( stream );
서버에서는 upload 메세지로 전송되는 데이타를 받아 지정된 파일로 저장한다.
(*path.basename 는 지정된 경로명을 제외하고 파일명만 추려낸다.)
var io = require('socket.io').listen(8765);
var ss = require('socket.io-stream');
var path = require('path');
io.sockets.on('connection', function(socket){
ss(socket).on('upload', function(stream,data){
var fn = path.basename(data.name);
stream.pipe(fs.createWriteStream(fn));
});
});
필요해서 만들어 봄. -0-