일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- docker
- elasticsearch
- Windows
- MSSQL
- JS
- mariadb
- JavaScript
- unity
- Linux
- error
- 구글
- 엘라스틱서치
- Ai
- Kibana
- 영어
- Git
- logstash
- MySQL
- API
- 설정
- s3
- nodejs
- 유니티
- ChatGPT
- build
- sample
- ssh
- AWS
- Python
- Today
- Total
가끔 보자, 하늘.
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-
'개발 이야기 > 개발 및 서비스' 카테고리의 다른 글
javascript 시간 비교 방법 (2) | 2015.06.04 |
---|---|
Coconut 오픈했습니다. (0) | 2015.05.07 |
Coconut 서비스 관리툴... 오픈 예정입니다. (0) | 2015.04.09 |
Unity에서 다른 클래스의 코루틴 호출하기 (0) | 2015.04.07 |
Asset Bundle 작업 흐름의 강화 - Unity Manual/Architecture/Architecture HOWTOs/AssetBundles (0) | 2015.03.20 |