2016-10-24 2 views
1

간단한 node.js 코드로 하나의 HTTP 서버와 하나의 TCP 서버를 가지고 있습니다. 그러나 HTTP에서 tcp로 일부 데이터를 전달할 때 올바른 파일을 가져올 수 없습니다. 파일은 항상 손상됩니다.HTTP 클라이언트로부터 수신 된 데이터가 TCP 서버로 전송되는 동안 손실됩니다.

로컬에서 이미지 파일을 테스트 할 때 제대로 작동합니다. 그래서 내가 생각하는 문제는 upload.js이지만 내 잘못을 정리할 수는 없습니다.

도와주세요.

[upload.js] - HTTP 서버

var server = http.createServer(function(request, response){ 

    /* my html form is 
     <form method="POST" action="/upload" enctype="multipart/form-data"> 
    */ 

    if(request.url == '/upload') { 

     request.on('data', function(data){ 
      var client = net.createConnection({ port: 1234 }, function(){ 
       client.write(data); 
       client.end() 
      }); 
     }) 

    } 
}); 
server.listen(1000); 

[save.js] - TCP 서버는 전체 예상 파일을 저장 만의 덩어리되지 않기 때문에이 발생

var net = require('net'); 
var fs = require('fs'); 

var server = net.createServer(function(c){ 
     var img = fs.createWriteStream('a.jpg', 
      { defaultEncoding: 'binary' }      
     ); 
     c.on('data', function(data){ 
       img.write(data); 
     }); 

     c.on('end', function(){ 
     }); 
}); 

server.listen(1234); 

답변

2

그것. 실제로 새 연결을 만들고 청크를 수신 할 때마다 TCP 서버 측에서 동일한 파일을 재생성하고 있습니다.

HTTP 서버 쪽에서는 글로벌 img var를 만들고 내부에 청크를 저장 한 다음 전송이 끝날 때만 TCP 연결을 시작해야합니다.

var img = []; 
var server = http.createServer(function(request, response){ 

    /* my html form is 
     <form method="POST" action="/upload" enctype="multipart/form-data"> 
    */ 

    if(request.url == '/upload') { 

     request.on('data', function(data){ 
      img.push(data); 
     }).on('end', function() { 
      var bytes = Buffer.concat(img); 
      var client = net.createConnection({ port: 1234 }, function(){ 
       client.write(bytes, function() { 
        client.end(); 
       }); 
      }); 
     }); 

    } 
}); 
server.listen(1000); 

TCP 서버는 더 이상 필요하지 않을 때 스트림을 닫아야한다는 점을 제외하고는 정상적으로 작동해야합니다.

c.on('end', function(){ 
    img.end(); 
}); 
+1

감사합니다. 너 node.js의 천사 야? 정말 고맙습니다. 내 문제를 해결하고 잘 작동합니다! –

관련 문제