관리 메뉴

가끔 보자, 하늘.

socket.io-stream으로 파일 전송하기 본문

개발 이야기/개발 및 서비스

socket.io-stream으로 파일 전송하기

가온아 2015. 4. 13. 18:31


클라이언트는 브라우저, 서버는 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-



반응형